diff --git a/env/sepolia.env b/env/sepolia.env index 254e69e..47ff94e 100644 --- a/env/sepolia.env +++ b/env/sepolia.env @@ -3,19 +3,28 @@ ############### REACT_APP_BLOCKCHAIN_URI=https://ethereum-sepolia.publicnode.com/ REACT_APP_CHAIN_ID=11155111 -REACT_APP_DJED_ADDRESS=0x624FcD0a1F9B5820c950FefD48087531d38387f4 +REACT_APP_DJED_ADDRESS=0xcAefe832436445eE3798F63658925b264F92A598 +REACT_APP_DJED_SHU_ADDRESS=0xcAefe832436445eE3798F63658925b264F92A598 REACT_APP_FEE_UI=0 REACT_APP_UI=0x0232556C83791b8291E9b23BfEa7d67405Bd9839 REACT_APP_EXPLORER=https://sepolia.etherscan.io/ REACT_APP_BC=Sepolia -REACT_APP_PROTOCOL_CHAIN_DESCRIPTION=Sepolia was initially launched as a proof-of-authority testnet in October 2021 by Ethereum core developers. +REACT_APP_PROTOCOL_CHAIN_DESCRIPTION=Sepolia was initially launched as a proof-of-authority testnet in October 2021 by Ethereum core developers REACT_APP_CHAIN_COIN=ETH -REACT_APP_SC_NAME=Sepolia Djed Osiris Dollar -REACT_APP_SC_SYMBOL=SOD -REACT_APP_RC_NAME=Sepolia Djed Osiris Reservecoin -REACT_APP_RC_SYMBOL=SOR +REACT_APP_SC_NAME=Sepolia Djed Tefnut Dollar +REACT_APP_SC_SYMBOL=STD +REACT_APP_RC_NAME=Sepolia Djed Tefnut Reservecoin +REACT_APP_RC_SYMBOL=STR REACT_APP_LIMIT_PER_TXN=10000 -REACT_APP_EVM_RESERVECOIN_ADDRESS=0xc61ac381F4F585fd194D3C5cE20B76826b960e5E -REACT_APP_EVM_STABLECOIN_ADDRESS=0x6b930182787F346F18666D167e8d32166dC5eFBD +REACT_APP_EVM_RESERVECOIN_ADDRESS=0x8F4577F6DdfA503ED2112cAdf6629C4ea4524a48 +REACT_APP_EVM_STABLECOIN_ADDRESS=0x0B3861ec4a3afef02345F5d0CB058D061017ECD8 -REACT_APP_LOGO_PATH=Logo_symbol.png \ No newline at end of file +# Color Theme +REACT_APP_GRADIENT_THEME='gradient-theme-7' +REACT_APP_COLOR_THEME='green-dark' + +REACT_APP_TERMS_OF_USE=terms-of-use-default +REACT_APP_LOGO_PATH=Logo_symbol.png + +# Tefnut version flag (simplified Djed with no reserve ratio limits) +REACT_APP_SHU_VERSION=true \ No newline at end of file diff --git a/src/artifacts/DjedTefnut.json b/src/artifacts/DjedTefnut.json new file mode 100644 index 0000000..a0b2b56 --- /dev/null +++ b/src/artifacts/DjedTefnut.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"oracleAddress","type":"address","internalType":"address"},{"name":"scalingFactor","type":"uint256","internalType":"uint256"},{"name":"treasury","type":"address","internalType":"address"},{"name":"treasuryFee","type":"uint256","internalType":"uint256"},{"name":"fee","type":"uint256","internalType":"uint256"},{"name":"thresholdSupplySc","type":"uint256","internalType":"uint256"},{"name":"rcMinPrice","type":"uint256","internalType":"uint256"},{"name":"rcInitialPrice","type":"uint256","internalType":"uint256"},{"name":"txLimit","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"E","inputs":[{"name":"currentPaymentAmount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"L","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"R","inputs":[{"name":"currentPaymentAmount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"RC_DECIMAL_SCALING_FACTOR","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"RC_INITIAL_PRICE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"RC_MIN_PRICE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"SCALING_FACTOR","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"SC_DECIMAL_SCALING_FACTOR","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"THRESHOLD_SUPPLY_SC","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"TREASURY","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"TREASURY_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"TX_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"buyReserveCoins","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"feeUi","type":"uint256","internalType":"uint256"},{"name":"ui","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"buyStableCoins","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"feeUi","type":"uint256","internalType":"uint256"},{"name":"ui","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"oracle","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IOracleShu"}],"stateMutability":"view"},{"type":"function","name":"ratio","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"rcBuyingPrice","inputs":[{"name":"currentPaymentAmount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"rcTargetPrice","inputs":[{"name":"currentPaymentAmount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"reserveCoin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Coin"}],"stateMutability":"view"},{"type":"function","name":"scMaxPrice","inputs":[{"name":"currentPaymentAmount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"scMinPrice","inputs":[{"name":"currentPaymentAmount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"sellReserveCoins","inputs":[{"name":"amountRc","type":"uint256","internalType":"uint256"},{"name":"receiver","type":"address","internalType":"address"},{"name":"feeUi","type":"uint256","internalType":"uint256"},{"name":"ui","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sellStableCoins","inputs":[{"name":"amountSc","type":"uint256","internalType":"uint256"},{"name":"receiver","type":"address","internalType":"address"},{"name":"feeUi","type":"uint256","internalType":"uint256"},{"name":"ui","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stableCoin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Coin"}],"stateMutability":"view"},{"type":"event","name":"BoughtReserveCoins","inputs":[{"name":"buyer","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"amountRc","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountBc","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BoughtStableCoins","inputs":[{"name":"buyer","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"amountSc","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountBc","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SoldReserveCoins","inputs":[{"name":"seller","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"amountRc","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountBc","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SoldStableCoins","inputs":[{"name":"seller","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"amountSc","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountBc","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x6101c06040526040516159b43803806159b483398181016040528101906100269190610658565b60015f819055505f73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff160361009b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161009290610776565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603610109576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610100906107de565b60405180910390fd5b5f881161014b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014290610846565b60405180910390fd5b8786866101589190610891565b1115610199576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101909061090e565b60405180910390fd5b828210156101dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d390610976565b60405180910390fd5b5f841161021e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610215906109de565b60405180910390fd5b5f8111610260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025790610a46565b60405180910390fd5b60405161026c906105ba565b61027590610af8565b604051809103905ff08015801561028e573d5f5f3e3d5ffd5b5060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040516102da906105ba565b6102e390610bbd565b604051809103905ff0801580156102fc573d5f5f3e3d5ffd5b5060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ca9190610c24565b600a6103d69190610d7e565b610180818152505060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610448573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046c9190610c24565b600a6104789190610d7e565b6101a081815250508761016081815250508673ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508560a081815250508460c081815250508360e081815250508261010081815250508161012081815250508061014081815250508860015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dddd9e966040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610596575f5ffd5b505af11580156105a8573d5f5f3e3d5ffd5b50505050505050505050505050610dc8565b611e1980613b9b83390190565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6105f4826105cb565b9050919050565b610604816105ea565b811461060e575f5ffd5b50565b5f8151905061061f816105fb565b92915050565b5f819050919050565b61063781610625565b8114610641575f5ffd5b50565b5f815190506106528161062e565b92915050565b5f5f5f5f5f5f5f5f5f6101208a8c031215610676576106756105c7565b5b5f6106838c828d01610611565b99505060206106948c828d01610644565b98505060406106a58c828d01610611565b97505060606106b68c828d01610644565b96505060806106c78c828d01610644565b95505060a06106d88c828d01610644565b94505060c06106e98c828d01610644565b93505060e06106fa8c828d01610644565b92505061010061070c8c828d01610644565b9150509295985092959850929598565b5f82825260208201905092915050565b7f496e76616c6964206f7261636c652061646472657373000000000000000000005f82015250565b5f61076060168361071c565b915061076b8261072c565b602082019050919050565b5f6020820190508181035f83015261078d81610754565b9050919050565b7f496e76616c6964207472656173757279206164647265737300000000000000005f82015250565b5f6107c860188361071c565b91506107d382610794565b602082019050919050565b5f6020820190508181035f8301526107f5816107bc565b9050919050565b7f5363616c696e6720666163746f72206d757374206265203e20300000000000005f82015250565b5f610830601a8361071c565b915061083b826107fc565b602082019050919050565b5f6020820190508181035f83015261085d81610824565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61089b82610625565b91506108a683610625565b92508282019050808211156108be576108bd610864565b5b92915050565b7f546f74616c2066656573206578636565642031303025000000000000000000005f82015250565b5f6108f860168361071c565b9150610903826108c4565b602082019050919050565b5f6020820190508181035f830152610925816108ec565b9050919050565b7f496e697469616c207072696365203c206d696e207072696365000000000000005f82015250565b5f61096060198361071c565b915061096b8261092c565b602082019050919050565b5f6020820190508181035f83015261098d81610954565b9050919050565b7f5468726573686f6c6420737570706c79206d757374206265203e2030000000005f82015250565b5f6109c8601c8361071c565b91506109d382610994565b602082019050919050565b5f6020820190508181035f8301526109f5816109bc565b9050919050565b7f5458206c696d6974206d757374206265203e20300000000000000000000000005f82015250565b5f610a3060148361071c565b9150610a3b826109fc565b602082019050919050565b5f6020820190508181035f830152610a5d81610a24565b9050919050565b7f537461626c65436f696e000000000000000000000000000000000000000000005f82015250565b5f610a98600a8361071c565b9150610aa382610a64565b602082019050919050565b7f53430000000000000000000000000000000000000000000000000000000000005f82015250565b5f610ae260028361071c565b9150610aed82610aae565b602082019050919050565b5f6040820190508181035f830152610b0f81610a8c565b90508181036020830152610b2281610ad6565b9050919050565b7f52657365727665436f696e0000000000000000000000000000000000000000005f82015250565b5f610b5d600b8361071c565b9150610b6882610b29565b602082019050919050565b7f52430000000000000000000000000000000000000000000000000000000000005f82015250565b5f610ba760028361071c565b9150610bb282610b73565b602082019050919050565b5f6040820190508181035f830152610bd481610b51565b90508181036020830152610be781610b9b565b9050919050565b5f60ff82169050919050565b610c0381610bee565b8114610c0d575f5ffd5b50565b5f81519050610c1e81610bfa565b92915050565b5f60208284031215610c3957610c386105c7565b5b5f610c4684828501610c10565b91505092915050565b5f8160011c9050919050565b5f5f8291508390505b6001851115610ca457808604811115610c8057610c7f610864565b5b6001851615610c8f5780820291505b8081029050610c9d85610c4f565b9450610c64565b94509492505050565b5f82610cbc5760019050610d77565b81610cc9575f9050610d77565b8160018114610cdf5760028114610ce957610d18565b6001915050610d77565b60ff841115610cfb57610cfa610864565b5b8360020a915084821115610d1257610d11610864565b5b50610d77565b5060208310610133831016604e8410600b8410161715610d4d5782820a905083811115610d4857610d47610864565b5b610d77565b610d5a8484846001610c5b565b92509050818404811115610d7157610d70610864565b5b81810290505b9392505050565b5f610d8882610625565b9150610d9383610bee565b9250610dc07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610cad565b905092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051612c99610f025f395f81816107f90152818161168f015281816118c90152611b9c01525f818161083b01528181610bce015281816111730152818161153d01528181611877015281816119d40152611f1301525f8181610eb1015281816118ed01528181611c5301528181611d0d01528181611d670152611da101525f818161085d01528181610c060152818161104c0152818161144a015261155f01525f818161185301526120ab01525f8181610b0a015261208001525f818161089b01528181610c30015281816110760152818161146e015261159d01525f818161182f01528181611c950152611d2e01525f818161134601528181611c740152611dc201525f8181610ae60152611dfd0152612c995ff3fe608060405260043610610163575f3560e01c8063992642e5116100d0578063c57981b511610089578063e5cfd84911610063578063e5cfd84914610501578063e652ae471461053d578063ee5af83314610579578063ef4cadc5146105a357610163565b8063c57981b514610483578063cf90d782146104ad578063e17ca3b4146104d757610163565b8063992642e5146103955780639f13f76d146103bf578063afb5453f146103e9578063b66e611e14610413578063b77e31f91461043d578063bfebe1821461045957610163565b806371ca337d1161012257806371ca337d146102775780637a4f8cba146102a15780637dc0d1d0146102c957806388b2cbb6146102f35780638ce1a4831461032f578063957f8afc1461035957610163565b80622ff06714610167578062bccbcb146101a35780631ac8fc2f146101df5780632d2c5565146102075780634a3c48d014610231578063574a30931461025b575b5f5ffd5b348015610172575f5ffd5b5061018d6004803603810190610188919061213a565b6105cd565b60405161019a9190612174565b60405180910390f35b3480156101ae575f5ffd5b506101c960048036038101906101c4919061213a565b6105e7565b6040516101d69190612174565b60405180910390f35b3480156101ea575f5ffd5b50610205600480360381019061020091906121e7565b61068b565b005b348015610212575f5ffd5b5061021b610ae4565b604051610228919061225a565b60405180910390f35b34801561023c575f5ffd5b50610245610b08565b6040516102529190612174565b60405180910390f35b61027560048036038101906102709190612273565b610b2c565b005b348015610282575f5ffd5b5061028b610e60565b6040516102989190612174565b60405180910390f35b3480156102ac575f5ffd5b506102c760048036038101906102c291906121e7565b610eeb565b005b3480156102d4575f5ffd5b506102dd611305565b6040516102ea919061231e565b60405180910390f35b3480156102fe575f5ffd5b506103196004803603810190610314919061213a565b61132a565b6040516103269190612174565b60405180910390f35b34801561033a575f5ffd5b50610343611344565b6040516103509190612174565b60405180910390f35b348015610364575f5ffd5b5061037f600480360381019061037a919061213a565b611368565b60405161038c9190612174565b60405180910390f35b3480156103a0575f5ffd5b506103a961140c565b6040516103b69190612357565b60405180910390f35b3480156103ca575f5ffd5b506103d3611431565b6040516103e09190612174565b60405180910390f35b3480156103f4575f5ffd5b506103fd611448565b60405161040a9190612174565b60405180910390f35b34801561041e575f5ffd5b5061042761146c565b6040516104349190612174565b60405180910390f35b61045760048036038101906104529190612273565b611490565b005b348015610464575f5ffd5b5061046d611808565b60405161047a9190612357565b60405180910390f35b34801561048e575f5ffd5b5061049761182d565b6040516104a49190612174565b60405180910390f35b3480156104b8575f5ffd5b506104c1611851565b6040516104ce9190612174565b60405180910390f35b3480156104e2575f5ffd5b506104eb611875565b6040516104f89190612174565b60405180910390f35b34801561050c575f5ffd5b506105276004803603810190610522919061213a565b611899565b6040516105349190612174565b60405180910390f35b348015610548575f5ffd5b50610563600480360381019061055e919061213a565b6118ad565b6040516105709190612174565b60405180910390f35b348015610584575f5ffd5b5061058d6118c7565b60405161059a9190612174565b60405180910390f35b3480156105ae575f5ffd5b506105b76118eb565b6040516105c49190612174565b60405180910390f35b5f6105e06105da836105e7565b8361190f565b9050919050565b5f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4316da86040518163ffffffff1660e01b81526004016040805180830381865afa158015610652573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106769190612384565b5090506106838382611934565b915050919050565b610693611a25565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386b629b56040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156106f9575f5ffd5b505af115801561070b573d5f5f3e3d5ffd5b505050508360035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161076a919061225a565b602060405180830381865afa158015610785573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a991906123c2565b10156107ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e190612447565b60405180910390fd5b5f6107f45f6105e7565b90505f7f0000000000000000000000000000000000000000000000000000000000000000610822835f611a72565b8761082d9190612492565b6108379190612500565b90507f0000000000000000000000000000000000000000000000000000000000000000827f00000000000000000000000000000000000000000000000000000000000000006108869190612492565b6108909190612500565b8111158061094a57507f000000000000000000000000000000000000000000000000000000000000000060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094891906123c2565b105b610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109809061257a565b60405180910390fd5b5f610995828686611be2565b90505f81116109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d0906125e2565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33896040518363ffffffff1660e01b8152600401610a35929190612600565b5f604051808303815f87803b158015610a4c575f5ffd5b505af1158015610a5e573d5f5f3e3d5ffd5b50505050610a6c8682611e5a565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f15e4dbe81367be42bcd3070bce6fe49bc9a13b25d7ee7fdd1e59b7563552fab78984604051610acb929190612627565b60405180910390a3505050610ade611f07565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610b34611a25565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386b629b56040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610b9a575f5ffd5b505af1158015610bac573d5f5f3e3d5ffd5b505050505f610bba346105e7565b90505f610bc8348585611be2565b90505f827f000000000000000000000000000000000000000000000000000000000000000083610bf89190612492565b610c029190612500565b90507f000000000000000000000000000000000000000000000000000000000000000081111580610cdf57507f000000000000000000000000000000000000000000000000000000000000000060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cdd91906123c2565b105b610d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1590612698565b60405180910390fd5b5f8111610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790612700565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1987836040518363ffffffff1660e01b8152600401610dbc929190612600565b5f604051808303815f87803b158015610dd3575f5ffd5b505af1158015610de5573d5f5f3e3d5ffd5b505050508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe2a93bd50c65406b1485d973a0eefc0938aa42447e8327a24413cf34646cb1c18385604051610e48929190612627565b60405180910390a3505050610e5b611f07565b505050565b5f5f610e73610e6e5f6105e7565b611f10565b90505f8103610ea5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff915050610ee8565b80610eaf5f611899565b7f0000000000000000000000000000000000000000000000000000000000000000610eda9190612492565b610ee49190612500565b9150505b90565b610ef3611a25565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386b629b56040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610f59575f5ffd5b505af1158015610f6b573d5f5f3e3d5ffd5b505050508360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fca919061225a565b602060405180830381865afa158015610fe5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100991906123c2565b101561104a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104190612768565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008411158061112557507f000000000000000000000000000000000000000000000000000000000000000060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ff573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112391906123c2565b105b611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b906127d0565b60405180910390fd5b5f61116e5f611368565b90505f7f0000000000000000000000000000000000000000000000000000000000000000828761119e9190612492565b6111a89190612500565b90505f6111b6828686611be2565b90505f81116111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190612838565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33896040518363ffffffff1660e01b8152600401611256929190612600565b5f604051808303815f87803b15801561126d575f5ffd5b505af115801561127f573d5f5f3e3d5ffd5b5050505061128d8682611e5a565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f5ca4c7224e0472de3d8d6d7816a14b47de89471be844d8c76bb75d1e528edfd189846040516112ec929190612627565b60405180910390a35050506112ff611f07565b50505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61133d611337836105e7565b83611a72565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636fbdfa476040518163ffffffff1660e01b81526004016040805180830381865afa1580156113d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f79190612384565b5090506114048382611934565b915050919050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61144361143e5f6105e7565b611f10565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b611498611a25565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386b629b56040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156114fe575f5ffd5b505af1158015611510573d5f5f3e3d5ffd5b505050505f61151e34611368565b90505f61152b8234611fdc565b90505f611539348686611be2565b90507f0000000000000000000000000000000000000000000000000000000000000000837f00000000000000000000000000000000000000000000000000000000000000006115889190612492565b6115929190612500565b8111158061164c57507f000000000000000000000000000000000000000000000000000000000000000060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611626573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164a91906123c2565b105b61168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906128a0565b60405180910390fd5b5f827f0000000000000000000000000000000000000000000000000000000000000000836116b99190612492565b6116c39190612500565b90505f8111611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90612908565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988836040518363ffffffff1660e01b8152600401611763929190612600565b5f604051808303815f87803b15801561177a575f5ffd5b505af115801561178c573d5f5f3e3d5ffd5b505050508673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8166a12a2e856c3ebafb91657860659290e42f5f615478292b29fb836f63f7c783856040516117ef929190612627565b60405180910390a350505050611803611f07565b505050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f81476118a69190612926565b9050919050565b5f6118c06118ba836105e7565b83611fdc565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f61191983611f10565b61192283611899565b61192c9190612926565b905092915050565b5f5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c491906123c2565b90505f8114611a1a57611a1583827f00000000000000000000000000000000000000000000000000000000000000006119fc88611899565b611a069190612492565b611a109190612500565b6120d3565b611a1c565b825b91505092915050565b60025f5403611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a60906129a3565b60405180910390fd5b60025f81905550565b5f5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ade573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b0291906123c2565b90505f8103611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d90612a0b565b60405180910390fd5b611b4f84611f10565b611b5884611899565b1015611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090612a99565b60405180910390fd5b807f0000000000000000000000000000000000000000000000000000000000000000611bc5868661190f565b611bcf9190612492565b611bd99190612500565b91505092915050565b5f5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890612b01565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000085611cbf9190612b1f565b611cc99190612b1f565b1115611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190612b9c565b60405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086611d589190612492565b611d629190612500565b90505f7f00000000000000000000000000000000000000000000000000000000000000008587611d929190612492565b611d9c9190612500565b90505f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088611dec9190612492565b611df69190612500565b9050611e227f000000000000000000000000000000000000000000000000000000000000000082611e5a565b611e2c8583611e5a565b80828489611e3a9190612926565b611e449190612926565b611e4e9190612926565b93505050509392505050565b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051611e7f90612be7565b5f6040518083038185875af1925050503d805f8114611eb9576040519150601f19603f3d011682016040523d82523d5f602084013e611ebe565b606091505b5050905080611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990612c45565b60405180910390fd5b505050565b60015f81905550565b5f7f00000000000000000000000000000000000000000000000000000000000000008260025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f9d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc191906123c2565b611fcb9190612492565b611fd59190612500565b9050919050565b5f5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612048573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061206c91906123c2565b146120a9576120a461207e8484611a72565b7f00000000000000000000000000000000000000000000000000000000000000006120eb565b6120cb565b7f00000000000000000000000000000000000000000000000000000000000000005b905092915050565b5f8183106120e157816120e3565b825b905092915050565b5f8183116120f957816120fb565b825b905092915050565b5f5ffd5b5f819050919050565b61211981612107565b8114612123575f5ffd5b50565b5f8135905061213481612110565b92915050565b5f6020828403121561214f5761214e612103565b5b5f61215c84828501612126565b91505092915050565b61216e81612107565b82525050565b5f6020820190506121875f830184612165565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6121b68261218d565b9050919050565b6121c6816121ac565b81146121d0575f5ffd5b50565b5f813590506121e1816121bd565b92915050565b5f5f5f5f608085870312156121ff576121fe612103565b5b5f61220c87828801612126565b945050602061221d878288016121d3565b935050604061222e87828801612126565b925050606061223f878288016121d3565b91505092959194509250565b612254816121ac565b82525050565b5f60208201905061226d5f83018461224b565b92915050565b5f5f5f6060848603121561228a57612289612103565b5b5f612297868287016121d3565b93505060206122a886828701612126565b92505060406122b9868287016121d3565b9150509250925092565b5f819050919050565b5f6122e66122e16122dc8461218d565b6122c3565b61218d565b9050919050565b5f6122f7826122cc565b9050919050565b5f612308826122ed565b9050919050565b612318816122fe565b82525050565b5f6020820190506123315f83018461230f565b92915050565b5f612341826122ed565b9050919050565b61235181612337565b82525050565b5f60208201905061236a5f830184612348565b92915050565b5f8151905061237e81612110565b92915050565b5f5f6040838503121561239a57612399612103565b5b5f6123a785828601612370565b92505060206123b885828601612370565b9150509250929050565b5f602082840312156123d7576123d6612103565b5b5f6123e484828501612370565b91505092915050565b5f82825260208201905092915050565b7f73656c6c52433a20696e73756666696369656e742052432062616c616e6365005f82015250565b5f612431601f836123ed565b915061243c826123fd565b602082019050919050565b5f6020820190508181035f83015261245e81612425565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61249c82612107565b91506124a783612107565b92508282026124b581612107565b915082820484148315176124cc576124cb612465565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61250a82612107565b915061251583612107565b925082612525576125246124d3565b5b828204905092915050565b7f73656c6c52433a207478206c696d6974206578636565646564000000000000005f82015250565b5f6125646019836123ed565b915061256f82612530565b602082019050919050565b5f6020820190508181035f83015261259181612558565b9050919050565b7f73656c6c52433a20726563656976696e67207a65726f204243730000000000005f82015250565b5f6125cc601a836123ed565b91506125d782612598565b602082019050919050565b5f6020820190508181035f8301526125f9816125c0565b9050919050565b5f6040820190506126135f83018561224b565b6126206020830184612165565b9392505050565b5f60408201905061263a5f830185612165565b6126476020830184612165565b9392505050565b7f62757953433a207478206c696d697420657863656564656400000000000000005f82015250565b5f6126826018836123ed565b915061268d8261264e565b602082019050919050565b5f6020820190508181035f8301526126af81612676565b9050919050565b7f62757953433a20726563656976696e67207a65726f20534373000000000000005f82015250565b5f6126ea6019836123ed565b91506126f5826126b6565b602082019050919050565b5f6020820190508181035f830152612717816126de565b9050919050565b7f73656c6c53433a20696e73756666696369656e742053432062616c616e6365005f82015250565b5f612752601f836123ed565b915061275d8261271e565b602082019050919050565b5f6020820190508181035f83015261277f81612746565b9050919050565b7f73656c6c53433a207478206c696d6974206578636565646564000000000000005f82015250565b5f6127ba6019836123ed565b91506127c582612786565b602082019050919050565b5f6020820190508181035f8301526127e7816127ae565b9050919050565b7f73656c6c53433a20726563656976696e67207a65726f204243730000000000005f82015250565b5f612822601a836123ed565b915061282d826127ee565b602082019050919050565b5f6020820190508181035f83015261284f81612816565b9050919050565b7f62757952433a207478206c696d697420657863656564656400000000000000005f82015250565b5f61288a6018836123ed565b915061289582612856565b602082019050919050565b5f6020820190508181035f8301526128b78161287e565b9050919050565b7f62757952433a20726563656976696e67207a65726f20524373000000000000005f82015250565b5f6128f26019836123ed565b91506128fd826128be565b602082019050919050565b5f6020820190508181035f83015261291f816128e6565b9050919050565b5f61293082612107565b915061293b83612107565b925082820390508181111561295357612952612465565b5b92915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f61298d601f836123ed565b915061299882612959565b602082019050919050565b5f6020820190508181035f8301526129ba81612981565b9050919050565b7f524320737570706c79206973207a65726f0000000000000000000000000000005f82015250565b5f6129f56011836123ed565b9150612a00826129c1565b602082019050919050565b5f6020820190508181035f830152612a22816129e9565b9050919050565b7f556e6465722d636f6c6c61746572616c697a65643a2072657365727665203c205f8201527f6c696162696c6974790000000000000000000000000000000000000000000000602082015250565b5f612a836029836123ed565b9150612a8e82612a29565b604082019050919050565b5f6020820190508181035f830152612ab081612a77565b9050919050565b7f496e76616c6964205549206164647265737300000000000000000000000000005f82015250565b5f612aeb6012836123ed565b9150612af682612ab7565b602082019050919050565b5f6020820190508181035f830152612b1881612adf565b9050919050565b5f612b2982612107565b9150612b3483612107565b9250828201905080821115612b4c57612b4b612465565b5b92915050565b7f546f74616c2066656573206578636565642031303025000000000000000000005f82015250565b5f612b866016836123ed565b9150612b9182612b52565b602082019050919050565b5f6020820190508181035f830152612bb381612b7a565b9050919050565b5f81905092915050565b50565b5f612bd25f83612bba565b9150612bdd82612bc4565b5f82019050919050565b5f612bf182612bc7565b9150819050919050565b7f5472616e73666572206661696c65642e000000000000000000000000000000005f82015250565b5f612c2f6010836123ed565b9150612c3a82612bfb565b602082019050919050565b5f6020820190508181035f830152612c5c81612c23565b905091905056fea2646970667358221220ccd74c52e40a2c06be2ff9d83188a8453f11cf9581ed4a268d6b33c158cf18aa64736f6c634300081e003360a060405234801561000f575f5ffd5b50604051611e19380380611e19833981810160405281019061003191906101dd565b818181600390816100429190610463565b5080600490816100529190610463565b5050503373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505050610532565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6100ef826100a9565b810181811067ffffffffffffffff8211171561010e5761010d6100b9565b5b80604052505050565b5f610120610090565b905061012c82826100e6565b919050565b5f67ffffffffffffffff82111561014b5761014a6100b9565b5b610154826100a9565b9050602081019050919050565b8281835e5f83830152505050565b5f61018161017c84610131565b610117565b90508281526020810184848401111561019d5761019c6100a5565b5b6101a8848285610161565b509392505050565b5f82601f8301126101c4576101c36100a1565b5b81516101d484826020860161016f565b91505092915050565b5f5f604083850312156101f3576101f2610099565b5b5f83015167ffffffffffffffff8111156102105761020f61009d565b5b61021c858286016101b0565b925050602083015167ffffffffffffffff81111561023d5761023c61009d565b5b610249858286016101b0565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806102a157607f821691505b6020821081036102b4576102b361025d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102db565b61032086836102db565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61036461035f61035a84610338565b610341565b610338565b9050919050565b5f819050919050565b61037d8361034a565b6103916103898261036b565b8484546102e7565b825550505050565b5f5f905090565b6103a8610399565b6103b3818484610374565b505050565b5b818110156103d6576103cb5f826103a0565b6001810190506103b9565b5050565b601f82111561041b576103ec816102ba565b6103f5846102cc565b81016020851015610404578190505b610418610410856102cc565b8301826103b8565b50505b505050565b5f82821c905092915050565b5f61043b5f1984600802610420565b1980831691505092915050565b5f610453838361042c565b9150826002028217905092915050565b61046c82610253565b67ffffffffffffffff811115610485576104846100b9565b5b61048f825461028a565b61049a8282856103da565b5f60209050601f8311600181146104cb575f84156104b9578287015190505b6104c38582610448565b86555061052a565b601f1984166104d9866102ba565b5f5b82811015610500578489015182556001820191506020850194506020810190506104db565b8683101561051d5784890151610519601f89168261042c565b8355505b6001600288020188555050505b505050505050565b6080516118c16105585f395f81816104330152818161051401526105c801526118c15ff3fe608060405234801561000f575f5ffd5b50600436106100e8575f3560e01c806370a082311161008a5780639dc29fac116100645780639dc29fac1461025e578063a457c2d71461027a578063a9059cbb146102aa578063dd62ed3e146102da576100e8565b806370a08231146101f25780638da5cb5b1461022257806395d89b4114610240576100e8565b806323b872dd116100c657806323b872dd14610158578063313ce5671461018857806339509351146101a657806340c10f19146101d6576100e8565b806306fdde03146100ec578063095ea7b31461010a57806318160ddd1461013a575b5f5ffd5b6100f461030a565b6040516101019190610fc7565b60405180910390f35b610124600480360381019061011f9190611078565b61039a565b60405161013191906110d0565b60405180910390f35b6101426103bc565b60405161014f91906110f8565b60405180910390f35b610172600480360381019061016d9190611111565b6103c5565b60405161017f91906110d0565b60405180910390f35b6101906103f3565b60405161019d919061117c565b60405180910390f35b6101c060048036038101906101bb9190611078565b6103fb565b6040516101cd91906110d0565b60405180910390f35b6101f060048036038101906101eb9190611078565b610431565b005b61020c60048036038101906102079190611195565b6104cd565b60405161021991906110f8565b60405180910390f35b61022a610512565b60405161023791906111cf565b60405180910390f35b610248610536565b6040516102559190610fc7565b60405180910390f35b61027860048036038101906102739190611078565b6105c6565b005b610294600480360381019061028f9190611078565b610662565b6040516102a191906110d0565b60405180910390f35b6102c460048036038101906102bf9190611078565b6106d7565b6040516102d191906110d0565b60405180910390f35b6102f460048036038101906102ef91906111e8565b6106f9565b60405161030191906110f8565b60405180910390f35b60606003805461031990611253565b80601f016020809104026020016040519081016040528092919081815260200182805461034590611253565b80156103905780601f1061036757610100808354040283529160200191610390565b820191905f5260205f20905b81548152906001019060200180831161037357829003601f168201915b5050505050905090565b5f5f6103a461077b565b90506103b1818585610782565b600191505092915050565b5f600254905090565b5f5f6103cf61077b565b90506103dc858285610945565b6103e78585856109d0565b60019150509392505050565b5f6006905090565b5f5f61040561077b565b905061042681858561041785896106f9565b61042191906112b0565b610782565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b69061132d565b60405180910390fd5b6104c98282610c3c565b5050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606004805461054590611253565b80601f016020809104026020016040519081016040528092919081815260200182805461057190611253565b80156105bc5780601f10610593576101008083540402835291602001916105bc565b820191905f5260205f20905b81548152906001019060200180831161059f57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064b9061132d565b60405180910390fd5b61065e8282610d8a565b5050565b5f5f61066c61077b565b90505f61067982866106f9565b9050838110156106be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b5906113bb565b60405180910390fd5b6106cb8286868403610782565b60019250505092915050565b5f5f6106e161077b565b90506106ee8185856109d0565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e790611449565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361085e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610855906114d7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161093891906110f8565b60405180910390a3505050565b5f61095084846106f9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109ca57818110156109bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b39061153f565b60405180910390fd5b6109c98484848403610782565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a35906115cd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa39061165b565b60405180910390fd5b610ab7838383610f4d565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b31906116e9565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c2391906110f8565b60405180910390a3610c36848484610f52565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190611751565b60405180910390fd5b610cb55f8383610f4d565b8060025f828254610cc691906112b0565b92505081905550805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d7391906110f8565b60405180910390a3610d865f8383610f52565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def906117df565b60405180910390fd5b610e03825f83610f4d565b5f5f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d9061186d565b60405180910390fd5b8181035f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f3591906110f8565b60405180910390a3610f48835f84610f52565b505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610f9982610f57565b610fa38185610f61565b9350610fb3818560208601610f71565b610fbc81610f7f565b840191505092915050565b5f6020820190508181035f830152610fdf8184610f8f565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61101482610feb565b9050919050565b6110248161100a565b811461102e575f5ffd5b50565b5f8135905061103f8161101b565b92915050565b5f819050919050565b61105781611045565b8114611061575f5ffd5b50565b5f813590506110728161104e565b92915050565b5f5f6040838503121561108e5761108d610fe7565b5b5f61109b85828601611031565b92505060206110ac85828601611064565b9150509250929050565b5f8115159050919050565b6110ca816110b6565b82525050565b5f6020820190506110e35f8301846110c1565b92915050565b6110f281611045565b82525050565b5f60208201905061110b5f8301846110e9565b92915050565b5f5f5f6060848603121561112857611127610fe7565b5b5f61113586828701611031565b935050602061114686828701611031565b925050604061115786828701611064565b9150509250925092565b5f60ff82169050919050565b61117681611161565b82525050565b5f60208201905061118f5f83018461116d565b92915050565b5f602082840312156111aa576111a9610fe7565b5b5f6111b784828501611031565b91505092915050565b6111c98161100a565b82525050565b5f6020820190506111e25f8301846111c0565b92915050565b5f5f604083850312156111fe576111fd610fe7565b5b5f61120b85828601611031565b925050602061121c85828601611031565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061126a57607f821691505b60208210810361127d5761127c611226565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6112ba82611045565b91506112c583611045565b92508282019050808211156112dd576112dc611283565b5b92915050565b7f556e617574686f72697a656400000000000000000000000000000000000000005f82015250565b5f611317600c83610f61565b9150611322826112e3565b602082019050919050565b5f6020820190508181035f8301526113448161130b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6113a5602583610f61565b91506113b08261134b565b604082019050919050565b5f6020820190508181035f8301526113d281611399565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611433602483610f61565b915061143e826113d9565b604082019050919050565b5f6020820190508181035f83015261146081611427565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6114c1602283610f61565b91506114cc82611467565b604082019050919050565b5f6020820190508181035f8301526114ee816114b5565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f611529601d83610f61565b9150611534826114f5565b602082019050919050565b5f6020820190508181035f8301526115568161151d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6115b7602583610f61565b91506115c28261155d565b604082019050919050565b5f6020820190508181035f8301526115e4816115ab565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611645602383610f61565b9150611650826115eb565b604082019050919050565b5f6020820190508181035f83015261167281611639565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6116d3602683610f61565b91506116de82611679565b604082019050919050565b5f6020820190508181035f830152611700816116c7565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f61173b601f83610f61565b915061174682611707565b602082019050919050565b5f6020820190508181035f8301526117688161172f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6117c9602183610f61565b91506117d48261176f565b604082019050919050565b5f6020820190508181035f8301526117f6816117bd565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f611857602283610f61565b9150611862826117fd565b604082019050919050565b5f6020820190508181035f8301526118848161184b565b905091905056fea2646970667358221220a7519588e1790babb413fc03752f8383865e02ec637f80a7487df39a76e5839b64736f6c634300081e0033","sourceMap":"288:9803:7:-:0;;;1551:1414;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1716:1:0;1821:7;:22;;;;1912:1:7;1887:27;;:13;:27;;;1879:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;1979:1;1959:22;;:8;:22;;;1951:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;2044:1;2028:13;:17;2020:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2115:13;2100:11;2094:3;:17;;;;:::i;:::-;:34;;2086:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2191:10;2173:14;:28;;2165:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;2269:1;2249:17;:21;2241:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;2331:1;2321:7;:11;2313:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;2381:28;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2368:10;;:41;;;;;;;;;;;;;;;;;;2433:29;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2419:11;;:43;;;;;;;;;;;;;;;;;;2506:10;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2500:2;:27;;;;:::i;:::-;2472:55;;;;;;2571:11;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2565:2;:28;;;;:::i;:::-;2537:56;;;;;;2620:13;2603:30;;;;;;2655:8;2644:19;;;;;;;;;;2688:11;2673:26;;;;;;2716:3;2710:9;;;;;;2751:17;2729:39;;;;;;2793:10;2778:25;;;;;;2832:14;2813:33;;;;;;2867:7;2856:18;;;;;;2905:13;2885:6;;:34;;;;;;;;;;;;;;;;;;2929:6;;;;;;;;;;;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1551:1414;;;;;;;;;288:9803;;;;;;;;;;:::o;88:117:9:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:77::-;882:7;911:5;900:16;;845:77;;;:::o;928:122::-;1001:24;1019:5;1001:24;:::i;:::-;994:5;991:35;981:63;;1040:1;1037;1030:12;981:63;928:122;:::o;1056:143::-;1113:5;1144:6;1138:13;1129:22;;1160:33;1187:5;1160:33;:::i;:::-;1056:143;;;;:::o;1205:1605::-;1347:6;1355;1363;1371;1379;1387;1395;1403;1411;1460:3;1448:9;1439:7;1435:23;1431:33;1428:120;;;1467:79;;:::i;:::-;1428:120;1587:1;1612:64;1668:7;1659:6;1648:9;1644:22;1612:64;:::i;:::-;1602:74;;1558:128;1725:2;1751:64;1807:7;1798:6;1787:9;1783:22;1751:64;:::i;:::-;1741:74;;1696:129;1864:2;1890:64;1946:7;1937:6;1926:9;1922:22;1890:64;:::i;:::-;1880:74;;1835:129;2003:2;2029:64;2085:7;2076:6;2065:9;2061:22;2029:64;:::i;:::-;2019:74;;1974:129;2142:3;2169:64;2225:7;2216:6;2205:9;2201:22;2169:64;:::i;:::-;2159:74;;2113:130;2282:3;2309:64;2365:7;2356:6;2345:9;2341:22;2309:64;:::i;:::-;2299:74;;2253:130;2422:3;2449:64;2505:7;2496:6;2485:9;2481:22;2449:64;:::i;:::-;2439:74;;2393:130;2562:3;2589:64;2645:7;2636:6;2625:9;2621:22;2589:64;:::i;:::-;2579:74;;2533:130;2702:3;2729:64;2785:7;2776:6;2765:9;2761:22;2729:64;:::i;:::-;2719:74;;2673:130;1205:1605;;;;;;;;;;;:::o;2816:169::-;2900:11;2934:6;2929:3;2922:19;2974:4;2969:3;2965:14;2950:29;;2816:169;;;;:::o;2991:172::-;3131:24;3127:1;3119:6;3115:14;3108:48;2991:172;:::o;3169:366::-;3311:3;3332:67;3396:2;3391:3;3332:67;:::i;:::-;3325:74;;3408:93;3497:3;3408:93;:::i;:::-;3526:2;3521:3;3517:12;3510:19;;3169:366;;;:::o;3541:419::-;3707:4;3745:2;3734:9;3730:18;3722:26;;3794:9;3788:4;3784:20;3780:1;3769:9;3765:17;3758:47;3822:131;3948:4;3822:131;:::i;:::-;3814:139;;3541:419;;;:::o;3966:174::-;4106:26;4102:1;4094:6;4090:14;4083:50;3966:174;:::o;4146:366::-;4288:3;4309:67;4373:2;4368:3;4309:67;:::i;:::-;4302:74;;4385:93;4474:3;4385:93;:::i;:::-;4503:2;4498:3;4494:12;4487:19;;4146:366;;;:::o;4518:419::-;4684:4;4722:2;4711:9;4707:18;4699:26;;4771:9;4765:4;4761:20;4757:1;4746:9;4742:17;4735:47;4799:131;4925:4;4799:131;:::i;:::-;4791:139;;4518:419;;;:::o;4943:176::-;5083:28;5079:1;5071:6;5067:14;5060:52;4943:176;:::o;5125:366::-;5267:3;5288:67;5352:2;5347:3;5288:67;:::i;:::-;5281:74;;5364:93;5453:3;5364:93;:::i;:::-;5482:2;5477:3;5473:12;5466:19;;5125:366;;;:::o;5497:419::-;5663:4;5701:2;5690:9;5686:18;5678:26;;5750:9;5744:4;5740:20;5736:1;5725:9;5721:17;5714:47;5778:131;5904:4;5778:131;:::i;:::-;5770:139;;5497:419;;;:::o;5922:180::-;5970:77;5967:1;5960:88;6067:4;6064:1;6057:15;6091:4;6088:1;6081:15;6108:191;6148:3;6167:20;6185:1;6167:20;:::i;:::-;6162:25;;6201:20;6219:1;6201:20;:::i;:::-;6196:25;;6244:1;6241;6237:9;6230:16;;6265:3;6262:1;6259:10;6256:36;;;6272:18;;:::i;:::-;6256:36;6108:191;;;;:::o;6305:172::-;6445:24;6441:1;6433:6;6429:14;6422:48;6305:172;:::o;6483:366::-;6625:3;6646:67;6710:2;6705:3;6646:67;:::i;:::-;6639:74;;6722:93;6811:3;6722:93;:::i;:::-;6840:2;6835:3;6831:12;6824:19;;6483:366;;;:::o;6855:419::-;7021:4;7059:2;7048:9;7044:18;7036:26;;7108:9;7102:4;7098:20;7094:1;7083:9;7079:17;7072:47;7136:131;7262:4;7136:131;:::i;:::-;7128:139;;6855:419;;;:::o;7280:175::-;7420:27;7416:1;7408:6;7404:14;7397:51;7280:175;:::o;7461:366::-;7603:3;7624:67;7688:2;7683:3;7624:67;:::i;:::-;7617:74;;7700:93;7789:3;7700:93;:::i;:::-;7818:2;7813:3;7809:12;7802:19;;7461:366;;;:::o;7833:419::-;7999:4;8037:2;8026:9;8022:18;8014:26;;8086:9;8080:4;8076:20;8072:1;8061:9;8057:17;8050:47;8114:131;8240:4;8114:131;:::i;:::-;8106:139;;7833:419;;;:::o;8258:178::-;8398:30;8394:1;8386:6;8382:14;8375:54;8258:178;:::o;8442:366::-;8584:3;8605:67;8669:2;8664:3;8605:67;:::i;:::-;8598:74;;8681:93;8770:3;8681:93;:::i;:::-;8799:2;8794:3;8790:12;8783:19;;8442:366;;;:::o;8814:419::-;8980:4;9018:2;9007:9;9003:18;8995:26;;9067:9;9061:4;9057:20;9053:1;9042:9;9038:17;9031:47;9095:131;9221:4;9095:131;:::i;:::-;9087:139;;8814:419;;;:::o;9239:170::-;9379:22;9375:1;9367:6;9363:14;9356:46;9239:170;:::o;9415:366::-;9557:3;9578:67;9642:2;9637:3;9578:67;:::i;:::-;9571:74;;9654:93;9743:3;9654:93;:::i;:::-;9772:2;9767:3;9763:12;9756:19;;9415:366;;;:::o;9787:419::-;9953:4;9991:2;9980:9;9976:18;9968:26;;10040:9;10034:4;10030:20;10026:1;10015:9;10011:17;10004:47;10068:131;10194:4;10068:131;:::i;:::-;10060:139;;9787:419;;;:::o;10212:160::-;10352:12;10348:1;10340:6;10336:14;10329:36;10212:160;:::o;10378:366::-;10520:3;10541:67;10605:2;10600:3;10541:67;:::i;:::-;10534:74;;10617:93;10706:3;10617:93;:::i;:::-;10735:2;10730:3;10726:12;10719:19;;10378:366;;;:::o;10750:152::-;10890:4;10886:1;10878:6;10874:14;10867:28;10750:152;:::o;10908:365::-;11050:3;11071:66;11135:1;11130:3;11071:66;:::i;:::-;11064:73;;11146:93;11235:3;11146:93;:::i;:::-;11264:2;11259:3;11255:12;11248:19;;10908:365;;;:::o;11279:726::-;11546:4;11584:2;11573:9;11569:18;11561:26;;11633:9;11627:4;11623:20;11619:1;11608:9;11604:17;11597:47;11661:131;11787:4;11661:131;:::i;:::-;11653:139;;11839:9;11833:4;11829:20;11824:2;11813:9;11809:18;11802:48;11867:131;11993:4;11867:131;:::i;:::-;11859:139;;11279:726;;;:::o;12011:161::-;12151:13;12147:1;12139:6;12135:14;12128:37;12011:161;:::o;12178:366::-;12320:3;12341:67;12405:2;12400:3;12341:67;:::i;:::-;12334:74;;12417:93;12506:3;12417:93;:::i;:::-;12535:2;12530:3;12526:12;12519:19;;12178:366;;;:::o;12550:152::-;12690:4;12686:1;12678:6;12674:14;12667:28;12550:152;:::o;12708:365::-;12850:3;12871:66;12935:1;12930:3;12871:66;:::i;:::-;12864:73;;12946:93;13035:3;12946:93;:::i;:::-;13064:2;13059:3;13055:12;13048:19;;12708:365;;;:::o;13079:726::-;13346:4;13384:2;13373:9;13369:18;13361:26;;13433:9;13427:4;13423:20;13419:1;13408:9;13404:17;13397:47;13461:131;13587:4;13461:131;:::i;:::-;13453:139;;13639:9;13633:4;13629:20;13624:2;13613:9;13609:18;13602:48;13667:131;13793:4;13667:131;:::i;:::-;13659:139;;13079:726;;;:::o;13811:86::-;13846:7;13886:4;13879:5;13875:16;13864:27;;13811:86;;;:::o;13903:118::-;13974:22;13990:5;13974:22;:::i;:::-;13967:5;13964:33;13954:61;;14011:1;14008;14001:12;13954:61;13903:118;:::o;14027:139::-;14082:5;14113:6;14107:13;14098:22;;14129:31;14154:5;14129:31;:::i;:::-;14027:139;;;;:::o;14172:347::-;14240:6;14289:2;14277:9;14268:7;14264:23;14260:32;14257:119;;;14295:79;;:::i;:::-;14257:119;14415:1;14440:62;14494:7;14485:6;14474:9;14470:22;14440:62;:::i;:::-;14430:72;;14386:126;14172:347;;;;:::o;14525:102::-;14567:8;14614:5;14611:1;14607:13;14586:34;;14525:102;;;:::o;14633:848::-;14694:5;14701:4;14725:6;14716:15;;14749:5;14740:14;;14763:712;14784:1;14774:8;14771:15;14763:712;;;14879:4;14874:3;14870:14;14864:4;14861:24;14858:50;;;14888:18;;:::i;:::-;14858:50;14938:1;14928:8;14924:16;14921:451;;;15353:4;15346:5;15342:16;15333:25;;14921:451;15403:4;15397;15393:15;15385:23;;15433:32;15456:8;15433:32;:::i;:::-;15421:44;;14763:712;;;14633:848;;;;;;;:::o;15487:1073::-;15541:5;15732:8;15722:40;;15753:1;15744:10;;15755:5;;15722:40;15781:4;15771:36;;15798:1;15789:10;;15800:5;;15771:36;15867:4;15915:1;15910:27;;;;15951:1;15946:191;;;;15860:277;;15910:27;15928:1;15919:10;;15930:5;;;15946:191;15991:3;15981:8;15978:17;15975:43;;;15998:18;;:::i;:::-;15975:43;16047:8;16044:1;16040:16;16031:25;;16082:3;16075:5;16072:14;16069:40;;;16089:18;;:::i;:::-;16069:40;16122:5;;;15860:277;;16246:2;16236:8;16233:16;16227:3;16221:4;16218:13;16214:36;16196:2;16186:8;16183:16;16178:2;16172:4;16169:12;16165:35;16149:111;16146:246;;;16302:8;16296:4;16292:19;16283:28;;16337:3;16330:5;16327:14;16324:40;;;16344:18;;:::i;:::-;16324:40;16377:5;;16146:246;16417:42;16455:3;16445:8;16439:4;16436:1;16417:42;:::i;:::-;16402:57;;;;16491:4;16486:3;16482:14;16475:5;16472:25;16469:51;;;16500:18;;:::i;:::-;16469:51;16549:4;16542:5;16538:16;16529:25;;15487:1073;;;;;;:::o;16566:281::-;16624:5;16648:23;16666:4;16648:23;:::i;:::-;16640:31;;16692:25;16708:8;16692:25;:::i;:::-;16680:37;;16736:104;16773:66;16763:8;16757:4;16736:104;:::i;:::-;16727:113;;16566:281;;;;:::o;288:9803:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610163575f3560e01c8063992642e5116100d0578063c57981b511610089578063e5cfd84911610063578063e5cfd84914610501578063e652ae471461053d578063ee5af83314610579578063ef4cadc5146105a357610163565b8063c57981b514610483578063cf90d782146104ad578063e17ca3b4146104d757610163565b8063992642e5146103955780639f13f76d146103bf578063afb5453f146103e9578063b66e611e14610413578063b77e31f91461043d578063bfebe1821461045957610163565b806371ca337d1161012257806371ca337d146102775780637a4f8cba146102a15780637dc0d1d0146102c957806388b2cbb6146102f35780638ce1a4831461032f578063957f8afc1461035957610163565b80622ff06714610167578062bccbcb146101a35780631ac8fc2f146101df5780632d2c5565146102075780634a3c48d014610231578063574a30931461025b575b5f5ffd5b348015610172575f5ffd5b5061018d6004803603810190610188919061213a565b6105cd565b60405161019a9190612174565b60405180910390f35b3480156101ae575f5ffd5b506101c960048036038101906101c4919061213a565b6105e7565b6040516101d69190612174565b60405180910390f35b3480156101ea575f5ffd5b50610205600480360381019061020091906121e7565b61068b565b005b348015610212575f5ffd5b5061021b610ae4565b604051610228919061225a565b60405180910390f35b34801561023c575f5ffd5b50610245610b08565b6040516102529190612174565b60405180910390f35b61027560048036038101906102709190612273565b610b2c565b005b348015610282575f5ffd5b5061028b610e60565b6040516102989190612174565b60405180910390f35b3480156102ac575f5ffd5b506102c760048036038101906102c291906121e7565b610eeb565b005b3480156102d4575f5ffd5b506102dd611305565b6040516102ea919061231e565b60405180910390f35b3480156102fe575f5ffd5b506103196004803603810190610314919061213a565b61132a565b6040516103269190612174565b60405180910390f35b34801561033a575f5ffd5b50610343611344565b6040516103509190612174565b60405180910390f35b348015610364575f5ffd5b5061037f600480360381019061037a919061213a565b611368565b60405161038c9190612174565b60405180910390f35b3480156103a0575f5ffd5b506103a961140c565b6040516103b69190612357565b60405180910390f35b3480156103ca575f5ffd5b506103d3611431565b6040516103e09190612174565b60405180910390f35b3480156103f4575f5ffd5b506103fd611448565b60405161040a9190612174565b60405180910390f35b34801561041e575f5ffd5b5061042761146c565b6040516104349190612174565b60405180910390f35b61045760048036038101906104529190612273565b611490565b005b348015610464575f5ffd5b5061046d611808565b60405161047a9190612357565b60405180910390f35b34801561048e575f5ffd5b5061049761182d565b6040516104a49190612174565b60405180910390f35b3480156104b8575f5ffd5b506104c1611851565b6040516104ce9190612174565b60405180910390f35b3480156104e2575f5ffd5b506104eb611875565b6040516104f89190612174565b60405180910390f35b34801561050c575f5ffd5b506105276004803603810190610522919061213a565b611899565b6040516105349190612174565b60405180910390f35b348015610548575f5ffd5b50610563600480360381019061055e919061213a565b6118ad565b6040516105709190612174565b60405180910390f35b348015610584575f5ffd5b5061058d6118c7565b60405161059a9190612174565b60405180910390f35b3480156105ae575f5ffd5b506105b76118eb565b6040516105c49190612174565b60405180910390f35b5f6105e06105da836105e7565b8361190f565b9050919050565b5f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d4316da86040518163ffffffff1660e01b81526004016040805180830381865afa158015610652573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106769190612384565b5090506106838382611934565b915050919050565b610693611a25565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386b629b56040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156106f9575f5ffd5b505af115801561070b573d5f5f3e3d5ffd5b505050508360035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161076a919061225a565b602060405180830381865afa158015610785573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a991906123c2565b10156107ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e190612447565b60405180910390fd5b5f6107f45f6105e7565b90505f7f0000000000000000000000000000000000000000000000000000000000000000610822835f611a72565b8761082d9190612492565b6108379190612500565b90507f0000000000000000000000000000000000000000000000000000000000000000827f00000000000000000000000000000000000000000000000000000000000000006108869190612492565b6108909190612500565b8111158061094a57507f000000000000000000000000000000000000000000000000000000000000000060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610924573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094891906123c2565b105b610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109809061257a565b60405180910390fd5b5f610995828686611be2565b90505f81116109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d0906125e2565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33896040518363ffffffff1660e01b8152600401610a35929190612600565b5f604051808303815f87803b158015610a4c575f5ffd5b505af1158015610a5e573d5f5f3e3d5ffd5b50505050610a6c8682611e5a565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f15e4dbe81367be42bcd3070bce6fe49bc9a13b25d7ee7fdd1e59b7563552fab78984604051610acb929190612627565b60405180910390a3505050610ade611f07565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610b34611a25565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386b629b56040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610b9a575f5ffd5b505af1158015610bac573d5f5f3e3d5ffd5b505050505f610bba346105e7565b90505f610bc8348585611be2565b90505f827f000000000000000000000000000000000000000000000000000000000000000083610bf89190612492565b610c029190612500565b90507f000000000000000000000000000000000000000000000000000000000000000081111580610cdf57507f000000000000000000000000000000000000000000000000000000000000000060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cdd91906123c2565b105b610d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1590612698565b60405180910390fd5b5f8111610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5790612700565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1987836040518363ffffffff1660e01b8152600401610dbc929190612600565b5f604051808303815f87803b158015610dd3575f5ffd5b505af1158015610de5573d5f5f3e3d5ffd5b505050508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe2a93bd50c65406b1485d973a0eefc0938aa42447e8327a24413cf34646cb1c18385604051610e48929190612627565b60405180910390a3505050610e5b611f07565b505050565b5f5f610e73610e6e5f6105e7565b611f10565b90505f8103610ea5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff915050610ee8565b80610eaf5f611899565b7f0000000000000000000000000000000000000000000000000000000000000000610eda9190612492565b610ee49190612500565b9150505b90565b610ef3611a25565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386b629b56040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610f59575f5ffd5b505af1158015610f6b573d5f5f3e3d5ffd5b505050508360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fca919061225a565b602060405180830381865afa158015610fe5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100991906123c2565b101561104a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104190612768565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008411158061112557507f000000000000000000000000000000000000000000000000000000000000000060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ff573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112391906123c2565b105b611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b906127d0565b60405180910390fd5b5f61116e5f611368565b90505f7f0000000000000000000000000000000000000000000000000000000000000000828761119e9190612492565b6111a89190612500565b90505f6111b6828686611be2565b90505f81116111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190612838565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33896040518363ffffffff1660e01b8152600401611256929190612600565b5f604051808303815f87803b15801561126d575f5ffd5b505af115801561127f573d5f5f3e3d5ffd5b5050505061128d8682611e5a565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f5ca4c7224e0472de3d8d6d7816a14b47de89471be844d8c76bb75d1e528edfd189846040516112ec929190612627565b60405180910390a35050506112ff611f07565b50505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61133d611337836105e7565b83611a72565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636fbdfa476040518163ffffffff1660e01b81526004016040805180830381865afa1580156113d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113f79190612384565b5090506114048382611934565b915050919050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61144361143e5f6105e7565b611f10565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b611498611a25565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386b629b56040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156114fe575f5ffd5b505af1158015611510573d5f5f3e3d5ffd5b505050505f61151e34611368565b90505f61152b8234611fdc565b90505f611539348686611be2565b90507f0000000000000000000000000000000000000000000000000000000000000000837f00000000000000000000000000000000000000000000000000000000000000006115889190612492565b6115929190612500565b8111158061164c57507f000000000000000000000000000000000000000000000000000000000000000060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611626573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164a91906123c2565b105b61168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906128a0565b60405180910390fd5b5f827f0000000000000000000000000000000000000000000000000000000000000000836116b99190612492565b6116c39190612500565b90505f8111611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90612908565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988836040518363ffffffff1660e01b8152600401611763929190612600565b5f604051808303815f87803b15801561177a575f5ffd5b505af115801561178c573d5f5f3e3d5ffd5b505050508673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8166a12a2e856c3ebafb91657860659290e42f5f615478292b29fb836f63f7c783856040516117ef929190612627565b60405180910390a350505050611803611f07565b505050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f81476118a69190612926565b9050919050565b5f6118c06118ba836105e7565b83611fdc565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f61191983611f10565b61192283611899565b61192c9190612926565b905092915050565b5f5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c491906123c2565b90505f8114611a1a57611a1583827f00000000000000000000000000000000000000000000000000000000000000006119fc88611899565b611a069190612492565b611a109190612500565b6120d3565b611a1c565b825b91505092915050565b60025f5403611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a60906129a3565b60405180910390fd5b60025f81905550565b5f5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ade573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b0291906123c2565b90505f8103611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d90612a0b565b60405180910390fd5b611b4f84611f10565b611b5884611899565b1015611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090612a99565b60405180910390fd5b807f0000000000000000000000000000000000000000000000000000000000000000611bc5868661190f565b611bcf9190612492565b611bd99190612500565b91505092915050565b5f5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890612b01565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000085611cbf9190612b1f565b611cc99190612b1f565b1115611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190612b9c565b60405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086611d589190612492565b611d629190612500565b90505f7f00000000000000000000000000000000000000000000000000000000000000008587611d929190612492565b611d9c9190612500565b90505f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000088611dec9190612492565b611df69190612500565b9050611e227f000000000000000000000000000000000000000000000000000000000000000082611e5a565b611e2c8583611e5a565b80828489611e3a9190612926565b611e449190612926565b611e4e9190612926565b93505050509392505050565b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051611e7f90612be7565b5f6040518083038185875af1925050503d805f8114611eb9576040519150601f19603f3d011682016040523d82523d5f602084013e611ebe565b606091505b5050905080611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990612c45565b60405180910390fd5b505050565b60015f81905550565b5f7f00000000000000000000000000000000000000000000000000000000000000008260025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f9d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc191906123c2565b611fcb9190612492565b611fd59190612500565b9050919050565b5f5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612048573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061206c91906123c2565b146120a9576120a461207e8484611a72565b7f00000000000000000000000000000000000000000000000000000000000000006120eb565b6120cb565b7f00000000000000000000000000000000000000000000000000000000000000005b905092915050565b5f8183106120e157816120e3565b825b905092915050565b5f8183116120f957816120fb565b825b905092915050565b5f5ffd5b5f819050919050565b61211981612107565b8114612123575f5ffd5b50565b5f8135905061213481612110565b92915050565b5f6020828403121561214f5761214e612103565b5b5f61215c84828501612126565b91505092915050565b61216e81612107565b82525050565b5f6020820190506121875f830184612165565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6121b68261218d565b9050919050565b6121c6816121ac565b81146121d0575f5ffd5b50565b5f813590506121e1816121bd565b92915050565b5f5f5f5f608085870312156121ff576121fe612103565b5b5f61220c87828801612126565b945050602061221d878288016121d3565b935050604061222e87828801612126565b925050606061223f878288016121d3565b91505092959194509250565b612254816121ac565b82525050565b5f60208201905061226d5f83018461224b565b92915050565b5f5f5f6060848603121561228a57612289612103565b5b5f612297868287016121d3565b93505060206122a886828701612126565b92505060406122b9868287016121d3565b9150509250925092565b5f819050919050565b5f6122e66122e16122dc8461218d565b6122c3565b61218d565b9050919050565b5f6122f7826122cc565b9050919050565b5f612308826122ed565b9050919050565b612318816122fe565b82525050565b5f6020820190506123315f83018461230f565b92915050565b5f612341826122ed565b9050919050565b61235181612337565b82525050565b5f60208201905061236a5f830184612348565b92915050565b5f8151905061237e81612110565b92915050565b5f5f6040838503121561239a57612399612103565b5b5f6123a785828601612370565b92505060206123b885828601612370565b9150509250929050565b5f602082840312156123d7576123d6612103565b5b5f6123e484828501612370565b91505092915050565b5f82825260208201905092915050565b7f73656c6c52433a20696e73756666696369656e742052432062616c616e6365005f82015250565b5f612431601f836123ed565b915061243c826123fd565b602082019050919050565b5f6020820190508181035f83015261245e81612425565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61249c82612107565b91506124a783612107565b92508282026124b581612107565b915082820484148315176124cc576124cb612465565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61250a82612107565b915061251583612107565b925082612525576125246124d3565b5b828204905092915050565b7f73656c6c52433a207478206c696d6974206578636565646564000000000000005f82015250565b5f6125646019836123ed565b915061256f82612530565b602082019050919050565b5f6020820190508181035f83015261259181612558565b9050919050565b7f73656c6c52433a20726563656976696e67207a65726f204243730000000000005f82015250565b5f6125cc601a836123ed565b91506125d782612598565b602082019050919050565b5f6020820190508181035f8301526125f9816125c0565b9050919050565b5f6040820190506126135f83018561224b565b6126206020830184612165565b9392505050565b5f60408201905061263a5f830185612165565b6126476020830184612165565b9392505050565b7f62757953433a207478206c696d697420657863656564656400000000000000005f82015250565b5f6126826018836123ed565b915061268d8261264e565b602082019050919050565b5f6020820190508181035f8301526126af81612676565b9050919050565b7f62757953433a20726563656976696e67207a65726f20534373000000000000005f82015250565b5f6126ea6019836123ed565b91506126f5826126b6565b602082019050919050565b5f6020820190508181035f830152612717816126de565b9050919050565b7f73656c6c53433a20696e73756666696369656e742053432062616c616e6365005f82015250565b5f612752601f836123ed565b915061275d8261271e565b602082019050919050565b5f6020820190508181035f83015261277f81612746565b9050919050565b7f73656c6c53433a207478206c696d6974206578636565646564000000000000005f82015250565b5f6127ba6019836123ed565b91506127c582612786565b602082019050919050565b5f6020820190508181035f8301526127e7816127ae565b9050919050565b7f73656c6c53433a20726563656976696e67207a65726f204243730000000000005f82015250565b5f612822601a836123ed565b915061282d826127ee565b602082019050919050565b5f6020820190508181035f83015261284f81612816565b9050919050565b7f62757952433a207478206c696d697420657863656564656400000000000000005f82015250565b5f61288a6018836123ed565b915061289582612856565b602082019050919050565b5f6020820190508181035f8301526128b78161287e565b9050919050565b7f62757952433a20726563656976696e67207a65726f20524373000000000000005f82015250565b5f6128f26019836123ed565b91506128fd826128be565b602082019050919050565b5f6020820190508181035f83015261291f816128e6565b9050919050565b5f61293082612107565b915061293b83612107565b925082820390508181111561295357612952612465565b5b92915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f61298d601f836123ed565b915061299882612959565b602082019050919050565b5f6020820190508181035f8301526129ba81612981565b9050919050565b7f524320737570706c79206973207a65726f0000000000000000000000000000005f82015250565b5f6129f56011836123ed565b9150612a00826129c1565b602082019050919050565b5f6020820190508181035f830152612a22816129e9565b9050919050565b7f556e6465722d636f6c6c61746572616c697a65643a2072657365727665203c205f8201527f6c696162696c6974790000000000000000000000000000000000000000000000602082015250565b5f612a836029836123ed565b9150612a8e82612a29565b604082019050919050565b5f6020820190508181035f830152612ab081612a77565b9050919050565b7f496e76616c6964205549206164647265737300000000000000000000000000005f82015250565b5f612aeb6012836123ed565b9150612af682612ab7565b602082019050919050565b5f6020820190508181035f830152612b1881612adf565b9050919050565b5f612b2982612107565b9150612b3483612107565b9250828201905080821115612b4c57612b4b612465565b5b92915050565b7f546f74616c2066656573206578636565642031303025000000000000000000005f82015250565b5f612b866016836123ed565b9150612b9182612b52565b602082019050919050565b5f6020820190508181035f830152612bb381612b7a565b9050919050565b5f81905092915050565b50565b5f612bd25f83612bba565b9150612bdd82612bc4565b5f82019050919050565b5f612bf182612bc7565b9150819050919050565b7f5472616e73666572206661696c65642e000000000000000000000000000000005f82015250565b5f612c2f6010836123ed565b9150612c3a82612bfb565b602082019050919050565b5f6020820190508181035f830152612c5c81612c23565b905091905056fea2646970667358221220ccd74c52e40a2c06be2ff9d83188a8453f11cf9581ed4a268d6b33c158cf18aa64736f6c634300081e0033","sourceMap":"288:9803:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3585:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8417:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6311:859;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;449:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;700:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4110:667;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3839:212;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4783:755;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;333:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8841:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;515:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8629:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;363:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3336:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;790:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;650:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5544:761;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;391:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;616:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;743:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;981:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3035:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9441:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1037:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;854:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3585:154;3649:7;3675:57;3677:32;3688:20;3677:10;:32::i;:::-;3711:20;3675:1;:57::i;:::-;3668:64;;3585:154;;;:::o;8417:206::-;8488:7;8508:21;8534:6;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8507:48;;;8572:44;8580:20;8602:13;8572:7;:44::i;:::-;8565:51;;;8417:206;;;:::o;6311:859::-;2261:21:0;:19;:21::i;:::-;6432:6:7::1;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6514:8;6477:11;;;;;;;;;;;:21;;;6499:10;6477:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;6469:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;6568:11;6582:13;6593:1;6582:10;:13::i;:::-;6568:27;;6605:13;6658:25;6633:21;6647:3;6652:1;6633:13;:21::i;:::-;6622:8;:32;;;;:::i;:::-;6621:62;;;;:::i;:::-;6605:78;;6729:25;6722:3;6711:8;:14;;;;:::i;:::-;6710:44;;;;:::i;:::-;6701:5;:53;;:103;;;;6785:19;6758:10;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;6701:103;6693:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;6844:16;6863:28;6874:5;6881;6888:2;6863:10;:28::i;:::-;6844:47;;6920:1;6909:8;:12;6901:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;6962:11;;;;;;;;;;;:16;;;6979:10;6991:8;6962:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7010:31;7022:8;7032;7010:11;:31::i;:::-;7134:8;7105:58;;7122:10;7105:58;;;7144:8;7154;7105:58;;;;;;;:::i;:::-;;;;;;;;6422:748;;;2303:20:0::0;:18;:20::i;:::-;6311:859:7;;;;:::o;449:33::-;;;:::o;700:37::-;;;:::o;4110:667::-;2261:21:0;:19;:21::i;:::-;4219:6:7::1;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4256:11;4270:21;4281:9;4270:10;:21::i;:::-;4256:35;;4301:16;4320:32;4331:9;4342:5;4349:2;4320:10;:32::i;:::-;4301:51;;4362:16;4422:3;4393:25;4382:8;:36;;;;:::i;:::-;4381:44;;;;:::i;:::-;4362:63;;4455:8;4443;:20;;:70;;;;4494:19;4467:10;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;4443:70;4435:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;4571:1;4560:8;:12;4552:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;4612:10;;;;;;;;;;;:15;;;4628:8;4638;4612:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4741:8;4711:59;;4729:10;4711:59;;;4751:8;4761;4711:59;;;;;;;:::i;:::-;;;;;;;;4209:568;;;2303:20:0::0;:18;:20::i;:::-;4110:667:7;;;:::o;3839:212::-;3879:7;3898:19;3920:16;3922:13;3933:1;3922:10;:13::i;:::-;3920:1;:16::i;:::-;3898:38;;3965:1;3950:11;:16;3946:46;;3975:17;3968:24;;;;;3946:46;4033:11;4026:4;4028:1;4026;:4::i;:::-;4009:14;:21;;;;:::i;:::-;:35;;;;:::i;:::-;4002:42;;;3839:212;;:::o;4783:755::-;2261:21:0;:19;:21::i;:::-;4903:6:7::1;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4984:8;4948:10;;;;;;;;;;;:20;;;4969:10;4948:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;4940:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;5058:8;5046;:20;;:70;;;;5097:19;5070:10;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;5046:70;5038:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;5156:11;5170:13;5181:1;5170:10;:13::i;:::-;5156:27;;5193:13;5228:25;5221:3;5210:8;:14;;;;:::i;:::-;5209:44;;;;:::i;:::-;5193:60;;5263:16;5282:28;5293:5;5300;5307:2;5282:10;:28::i;:::-;5263:47;;5339:1;5328:8;:12;5320:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;5381:10;;;;;;;;;;;:15;;;5397:10;5409:8;5381:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5428:31;5440:8;5450;5428:11;:31::i;:::-;5502:8;5474:57;;5490:10;5474:57;;;5512:8;5522;5474:57;;;;;;;:::i;:::-;;;;;;;;4893:645;;;2303:20:0::0;:18;:20::i;:::-;4783:755:7;;;;:::o;333:24::-;;;;;;;;;;;;;:::o;8841:178::-;8917:7;8943:69;8957:32;8968:20;8957:10;:32::i;:::-;8991:20;8943:13;:69::i;:::-;8936:76;;8841:178;;;:::o;515:37::-;;;:::o;8629:206::-;8700:7;8720:21;8746:6;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8719:48;;;8784:44;8792:20;8814:13;8784:7;:44::i;:::-;8777:51;;;8629:206;;;:::o;363:22::-;;;;;;;;;;;;;:::o;3336:85::-;3372:7;3398:16;3400:13;3411:1;3400:10;:13::i;:::-;3398:1;:16::i;:::-;3391:23;;3336:85;:::o;790:33::-;;;:::o;650:44::-;;;:::o;5544:761::-;2261:21:0;:19;:21::i;:::-;5654:6:7::1;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5691:11;5705:21;5716:9;5705:10;:21::i;:::-;5691:35;;5736:12;5751:29;5765:3;5770:9;5751:13;:29::i;:::-;5736:44;;5790:16;5809:32;5820:9;5831:5;5838:2;5809:10;:32::i;:::-;5790:51;;5890:25;5883:3;5872:8;:14;;;;:::i;:::-;5871:44;;;;:::i;:::-;5859:8;:56;;:106;;;;5946:19;5919:10;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;5859:106;5851:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;6004:16;6064:4;6035:25;6024:8;:36;;;;:::i;:::-;6023:45;;;;:::i;:::-;6004:64;;6097:1;6086:8;:12;6078:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;6138:11;;;;;;;;;;;:16;;;6155:8;6165;6138:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6269:8;6238:60;;6257:10;6238:60;;;6279:8;6289;6238:60;;;;;;;:::i;:::-;;;;;;;;5644:661;;;;2303:20:0::0;:18;:20::i;:::-;5544:761:7;;;:::o;391:23::-;;;;;;;;;;;;;:::o;616:28::-;;;:::o;743:41::-;;;:::o;981:50::-;;;:::o;3035:139::-;3097:7;3147:20;3123:21;:44;;;;:::i;:::-;3116:51;;3035:139;;;:::o;9441:178::-;9517:7;9543:69;9557:32;9568:20;9557:10;:32::i;:::-;9591:20;9543:13;:69::i;:::-;9536:76;;9441:178;;;:::o;1037:50::-;;;:::o;854:39::-;;;:::o;3427:152::-;3509:7;3561:11;3563:8;3561:1;:11::i;:::-;3535:23;3537:20;3535:1;:23::i;:::-;:37;;;;:::i;:::-;3528:44;;3427:152;;;;:::o;8088:323::-;8180:7;8199:16;8218:10;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8199:43;;8271:1;8259:8;:13;:145;;8315:89;8324:13;8395:8;8366:25;8340:23;8342:20;8340:1;:23::i;:::-;:51;;;;:::i;:::-;8339:64;;;;:::i;:::-;8315:8;:89::i;:::-;8259:145;;;8287:13;8259:145;8252:152;;;8088:323;;;;:::o;2336:287:0:-;1759:1;2468:7;;:19;2460:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1759:1;2598:7;:18;;;;2336:287::o;9025:410:7:-;9119:7;9138:16;9157:11;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9138:44;;9212:1;9200:8;:13;9192:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;9280:11;9282:8;9280:1;:11::i;:::-;9253:23;9255:20;9253:1;:23::i;:::-;:38;;9245:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;9420:8;9391:25;9355:33;9357:8;9367:20;9355:1;:33::i;:::-;:61;;;;:::i;:::-;9354:74;;;;:::i;:::-;9347:81;;;9025:410;;;;:::o;7255:685::-;7335:7;7376:1;7362:16;;:2;:16;;;7354:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;7449:14;7433:12;7427:3;7419:5;:11;;;;:::i;:::-;:26;;;;:::i;:::-;:44;;7411:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;7500:9;7528:14;7521:3;7513:5;:11;;;;:::i;:::-;7512:30;;;;:::i;:::-;7500:42;;7552:11;7584:14;7575:5;7567;:13;;;;:::i;:::-;7566:32;;;;:::i;:::-;7552:46;;7608:10;7646:14;7630:12;7622:5;:20;;;;:::i;:::-;7621:39;;;;:::i;:::-;7608:52;;7703:25;7715:8;7725:2;7703:11;:25::i;:::-;7738:20;7750:2;7754:3;7738:11;:20::i;:::-;7919:2;7913:3;7909:1;7901:5;:9;;;;:::i;:::-;:15;;;;:::i;:::-;:20;;;;:::i;:::-;7894:27;;;;;7255:685;;;;;:::o;9903:186::-;9978:12;10003:8;9995:22;;10025:6;9995:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9977:59;;;10054:7;10046:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;9967:122;9903:186;;:::o;2629:209:0:-;1716:1;2809:7;:22;;;;2629:209::o;3180:150:7:-;3232:7;3298:25;3286:8;3259:10;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;;;;:::i;:::-;3258:65;;;;:::i;:::-;3251:72;;3180:150;;;:::o;9625:272::-;9719:7;9774:1;9745:11;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;:145;;9821:69;9830:45;9844:8;9854:20;9830:13;:45::i;:::-;9877:12;9821:8;:69::i;:::-;9745:145;;;9790:16;9745:145;9738:152;;9625:272;;;;:::o;588:104:5:-;646:7;676:1;672;:5;:13;;684:1;672:13;;;680:1;672:13;665:20;;588:104;;;;:::o;413:::-;471:7;501:1;497;:5;:13;;509:1;497:13;;;505:1;497:13;490:20;;413:104;;;;:::o;88:117:9:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1025:118;;:::o;1149:222::-;1242:4;1280:2;1269:9;1265:18;1257:26;;1293:71;1361:1;1350:9;1346:17;1337:6;1293:71;:::i;:::-;1149:222;;;;:::o;1377:126::-;1414:7;1454:42;1447:5;1443:54;1432:65;;1377:126;;;:::o;1509:96::-;1546:7;1575:24;1593:5;1575:24;:::i;:::-;1564:35;;1509:96;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:765::-;1970:6;1978;1986;1994;2043:3;2031:9;2022:7;2018:23;2014:33;2011:120;;;2050:79;;:::i;:::-;2011:120;2170:1;2195:53;2240:7;2231:6;2220:9;2216:22;2195:53;:::i;:::-;2185:63;;2141:117;2297:2;2323:53;2368:7;2359:6;2348:9;2344:22;2323:53;:::i;:::-;2313:63;;2268:118;2425:2;2451:53;2496:7;2487:6;2476:9;2472:22;2451:53;:::i;:::-;2441:63;;2396:118;2553:2;2579:53;2624:7;2615:6;2604:9;2600:22;2579:53;:::i;:::-;2569:63;;2524:118;1884:765;;;;;;;:::o;2655:118::-;2742:24;2760:5;2742:24;:::i;:::-;2737:3;2730:37;2655:118;;:::o;2779:222::-;2872:4;2910:2;2899:9;2895:18;2887:26;;2923:71;2991:1;2980:9;2976:17;2967:6;2923:71;:::i;:::-;2779:222;;;;:::o;3007:619::-;3084:6;3092;3100;3149:2;3137:9;3128:7;3124:23;3120:32;3117:119;;;3155:79;;:::i;:::-;3117:119;3275:1;3300:53;3345:7;3336:6;3325:9;3321:22;3300:53;:::i;:::-;3290:63;;3246:117;3402:2;3428:53;3473:7;3464:6;3453:9;3449:22;3428:53;:::i;:::-;3418:63;;3373:118;3530:2;3556:53;3601:7;3592:6;3581:9;3577:22;3556:53;:::i;:::-;3546:63;;3501:118;3007:619;;;;;:::o;3632:60::-;3660:3;3681:5;3674:12;;3632:60;;;:::o;3698:142::-;3748:9;3781:53;3799:34;3808:24;3826:5;3808:24;:::i;:::-;3799:34;:::i;:::-;3781:53;:::i;:::-;3768:66;;3698:142;;;:::o;3846:126::-;3896:9;3929:37;3960:5;3929:37;:::i;:::-;3916:50;;3846:126;;;:::o;3978:145::-;4047:9;4080:37;4111:5;4080:37;:::i;:::-;4067:50;;3978:145;;;:::o;4129:169::-;4235:56;4285:5;4235:56;:::i;:::-;4230:3;4223:69;4129:169;;:::o;4304:260::-;4416:4;4454:2;4443:9;4439:18;4431:26;;4467:90;4554:1;4543:9;4539:17;4530:6;4467:90;:::i;:::-;4304:260;;;;:::o;4570:139::-;4633:9;4666:37;4697:5;4666:37;:::i;:::-;4653:50;;4570:139;;;:::o;4715:157::-;4815:50;4859:5;4815:50;:::i;:::-;4810:3;4803:63;4715:157;;:::o;4878:248::-;4984:4;5022:2;5011:9;5007:18;4999:26;;5035:84;5116:1;5105:9;5101:17;5092:6;5035:84;:::i;:::-;4878:248;;;;:::o;5132:143::-;5189:5;5220:6;5214:13;5205:22;;5236:33;5263:5;5236:33;:::i;:::-;5132:143;;;;:::o;5281:507::-;5360:6;5368;5417:2;5405:9;5396:7;5392:23;5388:32;5385:119;;;5423:79;;:::i;:::-;5385:119;5543:1;5568:64;5624:7;5615:6;5604:9;5600:22;5568:64;:::i;:::-;5558:74;;5514:128;5681:2;5707:64;5763:7;5754:6;5743:9;5739:22;5707:64;:::i;:::-;5697:74;;5652:129;5281:507;;;;;:::o;5794:351::-;5864:6;5913:2;5901:9;5892:7;5888:23;5884:32;5881:119;;;5919:79;;:::i;:::-;5881:119;6039:1;6064:64;6120:7;6111:6;6100:9;6096:22;6064:64;:::i;:::-;6054:74;;6010:128;5794:351;;;;:::o;6151:169::-;6235:11;6269:6;6264:3;6257:19;6309:4;6304:3;6300:14;6285:29;;6151:169;;;;:::o;6326:181::-;6466:33;6462:1;6454:6;6450:14;6443:57;6326:181;:::o;6513:366::-;6655:3;6676:67;6740:2;6735:3;6676:67;:::i;:::-;6669:74;;6752:93;6841:3;6752:93;:::i;:::-;6870:2;6865:3;6861:12;6854:19;;6513:366;;;:::o;6885:419::-;7051:4;7089:2;7078:9;7074:18;7066:26;;7138:9;7132:4;7128:20;7124:1;7113:9;7109:17;7102:47;7166:131;7292:4;7166:131;:::i;:::-;7158:139;;6885:419;;;:::o;7310:180::-;7358:77;7355:1;7348:88;7455:4;7452:1;7445:15;7479:4;7476:1;7469:15;7496:410;7536:7;7559:20;7577:1;7559:20;:::i;:::-;7554:25;;7593:20;7611:1;7593:20;:::i;:::-;7588:25;;7648:1;7645;7641:9;7670:30;7688:11;7670:30;:::i;:::-;7659:41;;7849:1;7840:7;7836:15;7833:1;7830:22;7810:1;7803:9;7783:83;7760:139;;7879:18;;:::i;:::-;7760:139;7544:362;7496:410;;;;:::o;7912:180::-;7960:77;7957:1;7950:88;8057:4;8054:1;8047:15;8081:4;8078:1;8071:15;8098:185;8138:1;8155:20;8173:1;8155:20;:::i;:::-;8150:25;;8189:20;8207:1;8189:20;:::i;:::-;8184:25;;8228:1;8218:35;;8233:18;;:::i;:::-;8218:35;8275:1;8272;8268:9;8263:14;;8098:185;;;;:::o;8289:175::-;8429:27;8425:1;8417:6;8413:14;8406:51;8289:175;:::o;8470:366::-;8612:3;8633:67;8697:2;8692:3;8633:67;:::i;:::-;8626:74;;8709:93;8798:3;8709:93;:::i;:::-;8827:2;8822:3;8818:12;8811:19;;8470:366;;;:::o;8842:419::-;9008:4;9046:2;9035:9;9031:18;9023:26;;9095:9;9089:4;9085:20;9081:1;9070:9;9066:17;9059:47;9123:131;9249:4;9123:131;:::i;:::-;9115:139;;8842:419;;;:::o;9267:176::-;9407:28;9403:1;9395:6;9391:14;9384:52;9267:176;:::o;9449:366::-;9591:3;9612:67;9676:2;9671:3;9612:67;:::i;:::-;9605:74;;9688:93;9777:3;9688:93;:::i;:::-;9806:2;9801:3;9797:12;9790:19;;9449:366;;;:::o;9821:419::-;9987:4;10025:2;10014:9;10010:18;10002:26;;10074:9;10068:4;10064:20;10060:1;10049:9;10045:17;10038:47;10102:131;10228:4;10102:131;:::i;:::-;10094:139;;9821:419;;;:::o;10246:332::-;10367:4;10405:2;10394:9;10390:18;10382:26;;10418:71;10486:1;10475:9;10471:17;10462:6;10418:71;:::i;:::-;10499:72;10567:2;10556:9;10552:18;10543:6;10499:72;:::i;:::-;10246:332;;;;;:::o;10584:::-;10705:4;10743:2;10732:9;10728:18;10720:26;;10756:71;10824:1;10813:9;10809:17;10800:6;10756:71;:::i;:::-;10837:72;10905:2;10894:9;10890:18;10881:6;10837:72;:::i;:::-;10584:332;;;;;:::o;10922:174::-;11062:26;11058:1;11050:6;11046:14;11039:50;10922:174;:::o;11102:366::-;11244:3;11265:67;11329:2;11324:3;11265:67;:::i;:::-;11258:74;;11341:93;11430:3;11341:93;:::i;:::-;11459:2;11454:3;11450:12;11443:19;;11102:366;;;:::o;11474:419::-;11640:4;11678:2;11667:9;11663:18;11655:26;;11727:9;11721:4;11717:20;11713:1;11702:9;11698:17;11691:47;11755:131;11881:4;11755:131;:::i;:::-;11747:139;;11474:419;;;:::o;11899:175::-;12039:27;12035:1;12027:6;12023:14;12016:51;11899:175;:::o;12080:366::-;12222:3;12243:67;12307:2;12302:3;12243:67;:::i;:::-;12236:74;;12319:93;12408:3;12319:93;:::i;:::-;12437:2;12432:3;12428:12;12421:19;;12080:366;;;:::o;12452:419::-;12618:4;12656:2;12645:9;12641:18;12633:26;;12705:9;12699:4;12695:20;12691:1;12680:9;12676:17;12669:47;12733:131;12859:4;12733:131;:::i;:::-;12725:139;;12452:419;;;:::o;12877:181::-;13017:33;13013:1;13005:6;13001:14;12994:57;12877:181;:::o;13064:366::-;13206:3;13227:67;13291:2;13286:3;13227:67;:::i;:::-;13220:74;;13303:93;13392:3;13303:93;:::i;:::-;13421:2;13416:3;13412:12;13405:19;;13064:366;;;:::o;13436:419::-;13602:4;13640:2;13629:9;13625:18;13617:26;;13689:9;13683:4;13679:20;13675:1;13664:9;13660:17;13653:47;13717:131;13843:4;13717:131;:::i;:::-;13709:139;;13436:419;;;:::o;13861:175::-;14001:27;13997:1;13989:6;13985:14;13978:51;13861:175;:::o;14042:366::-;14184:3;14205:67;14269:2;14264:3;14205:67;:::i;:::-;14198:74;;14281:93;14370:3;14281:93;:::i;:::-;14399:2;14394:3;14390:12;14383:19;;14042:366;;;:::o;14414:419::-;14580:4;14618:2;14607:9;14603:18;14595:26;;14667:9;14661:4;14657:20;14653:1;14642:9;14638:17;14631:47;14695:131;14821:4;14695:131;:::i;:::-;14687:139;;14414:419;;;:::o;14839:176::-;14979:28;14975:1;14967:6;14963:14;14956:52;14839:176;:::o;15021:366::-;15163:3;15184:67;15248:2;15243:3;15184:67;:::i;:::-;15177:74;;15260:93;15349:3;15260:93;:::i;:::-;15378:2;15373:3;15369:12;15362:19;;15021:366;;;:::o;15393:419::-;15559:4;15597:2;15586:9;15582:18;15574:26;;15646:9;15640:4;15636:20;15632:1;15621:9;15617:17;15610:47;15674:131;15800:4;15674:131;:::i;:::-;15666:139;;15393:419;;;:::o;15818:174::-;15958:26;15954:1;15946:6;15942:14;15935:50;15818:174;:::o;15998:366::-;16140:3;16161:67;16225:2;16220:3;16161:67;:::i;:::-;16154:74;;16237:93;16326:3;16237:93;:::i;:::-;16355:2;16350:3;16346:12;16339:19;;15998:366;;;:::o;16370:419::-;16536:4;16574:2;16563:9;16559:18;16551:26;;16623:9;16617:4;16613:20;16609:1;16598:9;16594:17;16587:47;16651:131;16777:4;16651:131;:::i;:::-;16643:139;;16370:419;;;:::o;16795:175::-;16935:27;16931:1;16923:6;16919:14;16912:51;16795:175;:::o;16976:366::-;17118:3;17139:67;17203:2;17198:3;17139:67;:::i;:::-;17132:74;;17215:93;17304:3;17215:93;:::i;:::-;17333:2;17328:3;17324:12;17317:19;;16976:366;;;:::o;17348:419::-;17514:4;17552:2;17541:9;17537:18;17529:26;;17601:9;17595:4;17591:20;17587:1;17576:9;17572:17;17565:47;17629:131;17755:4;17629:131;:::i;:::-;17621:139;;17348:419;;;:::o;17773:194::-;17813:4;17833:20;17851:1;17833:20;:::i;:::-;17828:25;;17867:20;17885:1;17867:20;:::i;:::-;17862:25;;17911:1;17908;17904:9;17896:17;;17935:1;17929:4;17926:11;17923:37;;;17940:18;;:::i;:::-;17923:37;17773:194;;;;:::o;17973:181::-;18113:33;18109:1;18101:6;18097:14;18090:57;17973:181;:::o;18160:366::-;18302:3;18323:67;18387:2;18382:3;18323:67;:::i;:::-;18316:74;;18399:93;18488:3;18399:93;:::i;:::-;18517:2;18512:3;18508:12;18501:19;;18160:366;;;:::o;18532:419::-;18698:4;18736:2;18725:9;18721:18;18713:26;;18785:9;18779:4;18775:20;18771:1;18760:9;18756:17;18749:47;18813:131;18939:4;18813:131;:::i;:::-;18805:139;;18532:419;;;:::o;18957:167::-;19097:19;19093:1;19085:6;19081:14;19074:43;18957:167;:::o;19130:366::-;19272:3;19293:67;19357:2;19352:3;19293:67;:::i;:::-;19286:74;;19369:93;19458:3;19369:93;:::i;:::-;19487:2;19482:3;19478:12;19471:19;;19130:366;;;:::o;19502:419::-;19668:4;19706:2;19695:9;19691:18;19683:26;;19755:9;19749:4;19745:20;19741:1;19730:9;19726:17;19719:47;19783:131;19909:4;19783:131;:::i;:::-;19775:139;;19502:419;;;:::o;19927:228::-;20067:34;20063:1;20055:6;20051:14;20044:58;20136:11;20131:2;20123:6;20119:15;20112:36;19927:228;:::o;20161:366::-;20303:3;20324:67;20388:2;20383:3;20324:67;:::i;:::-;20317:74;;20400:93;20489:3;20400:93;:::i;:::-;20518:2;20513:3;20509:12;20502:19;;20161:366;;;:::o;20533:419::-;20699:4;20737:2;20726:9;20722:18;20714:26;;20786:9;20780:4;20776:20;20772:1;20761:9;20757:17;20750:47;20814:131;20940:4;20814:131;:::i;:::-;20806:139;;20533:419;;;:::o;20958:168::-;21098:20;21094:1;21086:6;21082:14;21075:44;20958:168;:::o;21132:366::-;21274:3;21295:67;21359:2;21354:3;21295:67;:::i;:::-;21288:74;;21371:93;21460:3;21371:93;:::i;:::-;21489:2;21484:3;21480:12;21473:19;;21132:366;;;:::o;21504:419::-;21670:4;21708:2;21697:9;21693:18;21685:26;;21757:9;21751:4;21747:20;21743:1;21732:9;21728:17;21721:47;21785:131;21911:4;21785:131;:::i;:::-;21777:139;;21504:419;;;:::o;21929:191::-;21969:3;21988:20;22006:1;21988:20;:::i;:::-;21983:25;;22022:20;22040:1;22022:20;:::i;:::-;22017:25;;22065:1;22062;22058:9;22051:16;;22086:3;22083:1;22080:10;22077:36;;;22093:18;;:::i;:::-;22077:36;21929:191;;;;:::o;22126:172::-;22266:24;22262:1;22254:6;22250:14;22243:48;22126:172;:::o;22304:366::-;22446:3;22467:67;22531:2;22526:3;22467:67;:::i;:::-;22460:74;;22543:93;22632:3;22543:93;:::i;:::-;22661:2;22656:3;22652:12;22645:19;;22304:366;;;:::o;22676:419::-;22842:4;22880:2;22869:9;22865:18;22857:26;;22929:9;22923:4;22919:20;22915:1;22904:9;22900:17;22893:47;22957:131;23083:4;22957:131;:::i;:::-;22949:139;;22676:419;;;:::o;23101:147::-;23202:11;23239:3;23224:18;;23101:147;;;;:::o;23254:114::-;;:::o;23374:398::-;23533:3;23554:83;23635:1;23630:3;23554:83;:::i;:::-;23547:90;;23646:93;23735:3;23646:93;:::i;:::-;23764:1;23759:3;23755:11;23748:18;;23374:398;;;:::o;23778:379::-;23962:3;23984:147;24127:3;23984:147;:::i;:::-;23977:154;;24148:3;24141:10;;23778:379;;;:::o;24163:166::-;24303:18;24299:1;24291:6;24287:14;24280:42;24163:166;:::o;24335:366::-;24477:3;24498:67;24562:2;24557:3;24498:67;:::i;:::-;24491:74;;24574:93;24663:3;24574:93;:::i;:::-;24692:2;24687:3;24683:12;24676:19;;24335:366;;;:::o;24707:419::-;24873:4;24911:2;24900:9;24896:18;24888:26;;24960:9;24954:4;24950:20;24946:1;24935:9;24931:17;24924:47;24988:131;25114:4;24988:131;:::i;:::-;24980:139;;24707:419;;;:::o","linkReferences":{},"immutableReferences":{"1729":[{"start":2790,"length":32},{"start":7677,"length":32}],"1731":[{"start":4934,"length":32},{"start":7284,"length":32},{"start":7618,"length":32}],"1733":[{"start":6191,"length":32},{"start":7317,"length":32},{"start":7470,"length":32}],"1735":[{"start":2203,"length":32},{"start":3120,"length":32},{"start":4214,"length":32},{"start":5230,"length":32},{"start":5533,"length":32}],"1737":[{"start":2826,"length":32},{"start":8320,"length":32}],"1739":[{"start":6227,"length":32},{"start":8363,"length":32}],"1741":[{"start":2141,"length":32},{"start":3078,"length":32},{"start":4172,"length":32},{"start":5194,"length":32},{"start":5471,"length":32}],"1743":[{"start":3761,"length":32},{"start":6381,"length":32},{"start":7251,"length":32},{"start":7437,"length":32},{"start":7527,"length":32},{"start":7585,"length":32}],"1745":[{"start":2107,"length":32},{"start":3022,"length":32},{"start":4467,"length":32},{"start":5437,"length":32},{"start":6263,"length":32},{"start":6612,"length":32},{"start":7955,"length":32}],"1747":[{"start":2041,"length":32},{"start":5775,"length":32},{"start":6345,"length":32},{"start":7068,"length":32}]}},"methodIdentifiers":{"E(uint256)":"002ff067","FEE()":"c57981b5","L()":"9f13f76d","R(uint256)":"e5cfd849","RC_DECIMAL_SCALING_FACTOR()":"ee5af833","RC_INITIAL_PRICE()":"cf90d782","RC_MIN_PRICE()":"4a3c48d0","SCALING_FACTOR()":"ef4cadc5","SC_DECIMAL_SCALING_FACTOR()":"e17ca3b4","THRESHOLD_SUPPLY_SC()":"b66e611e","TREASURY()":"2d2c5565","TREASURY_FEE()":"8ce1a483","TX_LIMIT()":"afb5453f","buyReserveCoins(address,uint256,address)":"b77e31f9","buyStableCoins(address,uint256,address)":"574a3093","oracle()":"7dc0d1d0","ratio()":"71ca337d","rcBuyingPrice(uint256)":"e652ae47","rcTargetPrice(uint256)":"88b2cbb6","reserveCoin()":"bfebe182","scMaxPrice(uint256)":"00bccbcb","scMinPrice(uint256)":"957f8afc","sellReserveCoins(uint256,address,uint256,address)":"1ac8fc2f","sellStableCoins(uint256,address,uint256,address)":"7a4f8cba","stableCoin()":"992642e5"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"scalingFactor\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"treasuryFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thresholdSupplySc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rcMinPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rcInitialPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"txLimit\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountRc\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountBc\",\"type\":\"uint256\"}],\"name\":\"BoughtReserveCoins\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSc\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountBc\",\"type\":\"uint256\"}],\"name\":\"BoughtStableCoins\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountRc\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountBc\",\"type\":\"uint256\"}],\"name\":\"SoldReserveCoins\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSc\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountBc\",\"type\":\"uint256\"}],\"name\":\"SoldStableCoins\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentPaymentAmount\",\"type\":\"uint256\"}],\"name\":\"E\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentPaymentAmount\",\"type\":\"uint256\"}],\"name\":\"R\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RC_DECIMAL_SCALING_FACTOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RC_INITIAL_PRICE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RC_MIN_PRICE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SCALING_FACTOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SC_DECIMAL_SCALING_FACTOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"THRESHOLD_SUPPLY_SC\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TX_LIMIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeUi\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ui\",\"type\":\"address\"}],\"name\":\"buyReserveCoins\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeUi\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ui\",\"type\":\"address\"}],\"name\":\"buyStableCoins\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"internalType\":\"contract IOracleShu\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ratio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentPaymentAmount\",\"type\":\"uint256\"}],\"name\":\"rcBuyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentPaymentAmount\",\"type\":\"uint256\"}],\"name\":\"rcTargetPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveCoin\",\"outputs\":[{\"internalType\":\"contract Coin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentPaymentAmount\",\"type\":\"uint256\"}],\"name\":\"scMaxPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentPaymentAmount\",\"type\":\"uint256\"}],\"name\":\"scMinPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountRc\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeUi\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ui\",\"type\":\"address\"}],\"name\":\"sellReserveCoins\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountSc\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeUi\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"ui\",\"type\":\"address\"}],\"name\":\"sellStableCoins\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stableCoin\",\"outputs\":[{\"internalType\":\"contract Coin\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/DjedTefnut.sol\":\"DjedTefnut\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@api3dao/=lib/contracts/\",\":@chainlink/contracts/=node_modules/@chainlink/contracts/\",\":@eth-optimism/=node_modules/@eth-optimism/\",\":@hebeswap/=lib/hebeswap-contract/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":hebeswap-contract/=lib/hebeswap-contract/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010\",\"dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x4ffc0547c02ad22925310c585c0f166f8759e2648a09e9b489100c42f15dd98d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15f52f51413a9de1ff191e2f6367c62178e1df7806d7880fe857a98b0b66253d\",\"dweb:/ipfs/QmaQG1fwfgUt5E9nu2cccFiV47B2V78MM1tCy1qB7n4MsH\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd\",\"dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33bbf48cc069be677705037ba7520c22b1b622c23b33e1a71495f2d36549d40b\",\"dweb:/ipfs/Qmct36zWXv3j7LZB83uwbg7TXwnZSN1fqHNDZ93GG98bGz\"]},\"src/Coin.sol\":{\"keccak256\":\"0x869c2244b8f6df4842244a472681a97c8665248d6a51381faa0da59affb86093\",\"license\":\"AEL\",\"urls\":[\"bzz-raw://6c7c22ef0484933bddef3d1f51c0245948151f7d381129b52d65a325eb33609d\",\"dweb:/ipfs/Qmd5jqZ4VZBLaJvxuRaqowysKPpsJ3RNYgpeJ8GqPc7Jrg\"]},\"src/DjedTefnut.sol\":{\"keccak256\":\"0x23e52e6b1f0d247147694c626ca749422bde7cef837a0205f87293704c53b3cc\",\"license\":\"AEL\",\"urls\":[\"bzz-raw://1bc120ebc43c8b59dde230ad83d4aa63e1a96a5226b32b98ddb5e04b5783c96e\",\"dweb:/ipfs/QmW7nURbjbrZ9Awcuw8pecVBRw1MVSDVqQWstVDFW9wHHZ\"]},\"src/IOracleShu.sol\":{\"keccak256\":\"0x586f59d9e5c2908eecda1f3dd72b6e436be0c9df44940bb2afa7cdd47b158c2e\",\"license\":\"AEL\",\"urls\":[\"bzz-raw://5da2c758dabd3578feb63916c9cec1626205e0e919852bb15687b4586b7950f8\",\"dweb:/ipfs/Qmcj9uERu97gYkCm54qTWxGG7GsLcEpgyRFa8DhLXgi6AT\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"oracleAddress","type":"address"},{"internalType":"uint256","name":"scalingFactor","type":"uint256"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"thresholdSupplySc","type":"uint256"},{"internalType":"uint256","name":"rcMinPrice","type":"uint256"},{"internalType":"uint256","name":"rcInitialPrice","type":"uint256"},{"internalType":"uint256","name":"txLimit","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"buyer","type":"address","indexed":true},{"internalType":"address","name":"receiver","type":"address","indexed":true},{"internalType":"uint256","name":"amountRc","type":"uint256","indexed":false},{"internalType":"uint256","name":"amountBc","type":"uint256","indexed":false}],"type":"event","name":"BoughtReserveCoins","anonymous":false},{"inputs":[{"internalType":"address","name":"buyer","type":"address","indexed":true},{"internalType":"address","name":"receiver","type":"address","indexed":true},{"internalType":"uint256","name":"amountSc","type":"uint256","indexed":false},{"internalType":"uint256","name":"amountBc","type":"uint256","indexed":false}],"type":"event","name":"BoughtStableCoins","anonymous":false},{"inputs":[{"internalType":"address","name":"seller","type":"address","indexed":true},{"internalType":"address","name":"receiver","type":"address","indexed":true},{"internalType":"uint256","name":"amountRc","type":"uint256","indexed":false},{"internalType":"uint256","name":"amountBc","type":"uint256","indexed":false}],"type":"event","name":"SoldReserveCoins","anonymous":false},{"inputs":[{"internalType":"address","name":"seller","type":"address","indexed":true},{"internalType":"address","name":"receiver","type":"address","indexed":true},{"internalType":"uint256","name":"amountSc","type":"uint256","indexed":false},{"internalType":"uint256","name":"amountBc","type":"uint256","indexed":false}],"type":"event","name":"SoldStableCoins","anonymous":false},{"inputs":[{"internalType":"uint256","name":"currentPaymentAmount","type":"uint256"}],"stateMutability":"view","type":"function","name":"E","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"L","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"currentPaymentAmount","type":"uint256"}],"stateMutability":"view","type":"function","name":"R","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RC_DECIMAL_SCALING_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RC_INITIAL_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RC_MIN_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"SCALING_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"SC_DECIMAL_SCALING_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"THRESHOLD_SUPPLY_SC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TREASURY","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TREASURY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TX_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"feeUi","type":"uint256"},{"internalType":"address","name":"ui","type":"address"}],"stateMutability":"payable","type":"function","name":"buyReserveCoins"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"feeUi","type":"uint256"},{"internalType":"address","name":"ui","type":"address"}],"stateMutability":"payable","type":"function","name":"buyStableCoins"},{"inputs":[],"stateMutability":"view","type":"function","name":"oracle","outputs":[{"internalType":"contract IOracleShu","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"ratio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"currentPaymentAmount","type":"uint256"}],"stateMutability":"view","type":"function","name":"rcBuyingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"currentPaymentAmount","type":"uint256"}],"stateMutability":"view","type":"function","name":"rcTargetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"reserveCoin","outputs":[{"internalType":"contract Coin","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"currentPaymentAmount","type":"uint256"}],"stateMutability":"view","type":"function","name":"scMaxPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"currentPaymentAmount","type":"uint256"}],"stateMutability":"view","type":"function","name":"scMinPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"amountRc","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"feeUi","type":"uint256"},{"internalType":"address","name":"ui","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"sellReserveCoins"},{"inputs":[{"internalType":"uint256","name":"amountSc","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"feeUi","type":"uint256"},{"internalType":"address","name":"ui","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"sellStableCoins"},{"inputs":[],"stateMutability":"view","type":"function","name":"stableCoin","outputs":[{"internalType":"contract Coin","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@api3dao/=lib/contracts/","@chainlink/contracts/=node_modules/@chainlink/contracts/","@eth-optimism/=node_modules/@eth-optimism/","@hebeswap/=lib/hebeswap-contract/","@openzeppelin/=lib/openzeppelin-contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","forge-std/=lib/forge-std/src/","hebeswap-contract/=lib/hebeswap-contract/","openzeppelin-contracts/=lib/openzeppelin-contracts/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":false,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/DjedTefnut.sol":"DjedTefnut"},"evmVersion":"prague","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol":{"keccak256":"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc","urls":["bzz-raw://4ce8dfb62d0c4fa260d6eec8f1cd47f5f2a044e11bde5b31d18072fa6e7d9010","dweb:/ipfs/QmTyFztU3tLEcEDnqqiaW4UJetqsU77LXc6pjc9oTXCK5u"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol":{"keccak256":"0x4ffc0547c02ad22925310c585c0f166f8759e2648a09e9b489100c42f15dd98d","urls":["bzz-raw://15f52f51413a9de1ff191e2f6367c62178e1df7806d7880fe857a98b0b66253d","dweb:/ipfs/QmaQG1fwfgUt5E9nu2cccFiV47B2V78MM1tCy1qB7n4MsH"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b","urls":["bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34","dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca","urls":["bzz-raw://5a376d3dda2cb70536c0a45c208b29b34ac560c4cb4f513a42079f96ba47d2dd","dweb:/ipfs/QmZQg6gn1sUpM8wHzwNvSnihumUCAhxD119MpXeKp8B9s8"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7","urls":["bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92","dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6","urls":["bzz-raw://33bbf48cc069be677705037ba7520c22b1b622c23b33e1a71495f2d36549d40b","dweb:/ipfs/Qmct36zWXv3j7LZB83uwbg7TXwnZSN1fqHNDZ93GG98bGz"],"license":"MIT"},"src/Coin.sol":{"keccak256":"0x869c2244b8f6df4842244a472681a97c8665248d6a51381faa0da59affb86093","urls":["bzz-raw://6c7c22ef0484933bddef3d1f51c0245948151f7d381129b52d65a325eb33609d","dweb:/ipfs/Qmd5jqZ4VZBLaJvxuRaqowysKPpsJ3RNYgpeJ8GqPc7Jrg"],"license":"AEL"},"src/DjedTefnut.sol":{"keccak256":"0x23e52e6b1f0d247147694c626ca749422bde7cef837a0205f87293704c53b3cc","urls":["bzz-raw://1bc120ebc43c8b59dde230ad83d4aa63e1a96a5226b32b98ddb5e04b5783c96e","dweb:/ipfs/QmW7nURbjbrZ9Awcuw8pecVBRw1MVSDVqQWstVDFW9wHHZ"],"license":"AEL"},"src/IOracleShu.sol":{"keccak256":"0x586f59d9e5c2908eecda1f3dd72b6e436be0c9df44940bb2afa7cdd47b158c2e","urls":["bzz-raw://5da2c758dabd3578feb63916c9cec1626205e0e919852bb15687b4586b7950f8","dweb:/ipfs/Qmcj9uERu97gYkCm54qTWxGG7GsLcEpgyRFa8DhLXgi6AT"],"license":"AEL"}},"version":1},"id":7} \ No newline at end of file diff --git a/src/components/molecules/CoinCard/CoinCard.jsx b/src/components/molecules/CoinCard/CoinCard.jsx index e5292a6..fee540d 100644 --- a/src/components/molecules/CoinCard/CoinCard.jsx +++ b/src/components/molecules/CoinCard/CoinCard.jsx @@ -38,14 +38,14 @@ const CoinCard = ({ ) : isShu ? ( <>
- Current Minimum Price + Sell Price (Min)

{minPriceAmount} {CHAIN_COIN}

- Current Maximum Price + Buy Price (Max)

{maxPriceAmount} {CHAIN_COIN}

diff --git a/src/components/molecules/ReservesCard/ReservesCard.jsx b/src/components/molecules/ReservesCard/ReservesCard.jsx index 4d5f893..2a79e55 100644 --- a/src/components/molecules/ReservesCard/ReservesCard.jsx +++ b/src/components/molecules/ReservesCard/ReservesCard.jsx @@ -11,8 +11,6 @@ const ReservesCard = ({ priceAmount, equivalence, reserveRatio, - reserveRatioMin, - reserveRatioMax, showCurrentReserveRatio, isShu }) => ( @@ -28,8 +26,6 @@ const ReservesCard = ({

≈ {equivalence}

- - {showCurrentReserveRatio && ( { isWalletConnected && isVisible ? COIN_DETAILS_REQUEST_INTERVAL : null ); - const isRatioBelowMax = ({ scPrice, reserveBc }) => { - const scDecimals = BigNumber.from(decimals.scDecimals); - const totalScSupply = BigNumber.from(coinsDetails?.unscaledNumberSc); - const reserveRatioMax = BigNumber.from(systemParams?.reserveRatioMaxUnscaled); - const scDecimalScalingFactor = BigNumber.from(10).pow(scDecimals); - const thresholdSupplySC = BigNumber.from(systemParams.thresholdSupplySC); - return calculateIsRatioBelowMax({ - scPrice, - reserveBc, - totalScSupply, - reserveRatioMax, - scDecimalScalingFactor, - thresholdSupplySC - }); - }; - - const isRatioAboveMin = ({ scPrice, totalScSupply, reserveBc }) => { - const scDecimals = BigNumber.from(decimals.scDecimals); - const reserveRatioMin = BigNumber.from(systemParams?.reserveRatioMinUnscaled); - const scDecimalScalingFactor = BigNumber.from(10).pow(scDecimals); - - return calculateIsRatioAboveMin({ - scPrice, - reserveBc, - totalScSupply, - reserveRatioMin, - scDecimalScalingFactor - }); - }; - - /** - * This function should prepare parameters for calculating future stableCoin price - * @param {string} amountBC The unscaled amount of BC (e.g. for 1BC, value should be 1 * 10^BC_DECIMALS) - * @param {string} amountSC The unscaled amount of StableCoin (e.g. for 1SC, value should be 1 * 10^SC_DECIMALS) - * @returns future stablecoin price as result of calculateFutureScPrice function - */ - const getFuturePrice = async ({ amountBC, amountSC, method }) => { - return method({ - amountBC, - amountSC, - djedContract, - oracleContract, - stableCoinContract: coinContracts.stableCoin, - scDecimalScalingFactor: BigNumber.from(10).pow(decimals.scDecimals) - }); - }; - - const getFutureScPrice = async (params) => - getFuturePrice({ ...params, method: calculateFutureScPrice }); - const getFutureMinScPrice = async (params) => - getFuturePrice({ ...params, method: calculateFutureMinScPrice }); - const getFutureMaxScPrice = async (params) => - getFuturePrice({ ...params, method: calculateFutureMaxScPrice }); - if (isLoading) { return ; } else { @@ -356,12 +296,7 @@ export const AppProvider = ({ children }) => { redirectToNufi, activeConnector, account, - signer, - isRatioBelowMax, - isRatioAboveMin, - getFutureScPrice, - getFutureMinScPrice, - getFutureMaxScPrice + signer }} > {children} diff --git a/src/routes/protocol.jsx b/src/routes/protocol.jsx index 39fc767..779775d 100644 --- a/src/routes/protocol.jsx +++ b/src/routes/protocol.jsx @@ -15,7 +15,7 @@ import { } from "../utils/helpers"; export default function Protocol() { - const { coinsDetails, isShu, systemParams } = useAppProvider(); + const { coinsDetails, isShu } = useAppProvider(); const scFloat = parseFloat(coinsDetails?.scaledNumberSc.replaceAll(",", "")); const scConverted = getScAdaEquivalent(coinsDetails, scFloat); @@ -31,13 +31,13 @@ export default function Protocol() {

- Djed on {process.env.REACT_APP_BC} + Djed Tefnut on {process.env.REACT_APP_BC}

- Djed is a formally verified crypto-backed autonomous stablecoin protocol. It - has been researched since Q2 2020, its whitepaper has been released in - August 2021, and it has multiple{" "} + Djed Tefnut is a simplified version of the Djed protocol - a formally verified + crypto-backed autonomous stablecoin protocol. It has been researched since Q2 2020, + its whitepaper has been released in August 2021, and it has multiple{" "} implementations {" "} @@ -49,7 +49,11 @@ export default function Protocol() { > deployments - . Here you can interact with a{" "} + . Djed Tefnut simplifies the original Djed by removing minimum and maximum + reserve ratio restrictions, allowing unrestricted minting and redemption at any time. +

+

+ Here you can interact with a{" "} deployment {" "} - that uses{" "} - - these smart contracts - {" "} on {process.env.REACT_APP_BC}.

@@ -117,8 +113,6 @@ export default function Protocol() { coinIcon="/coin-icon-three.png" coinName="Reserves" reserveRatio={coinsDetails?.percentReserveRatio} - reserveRatioMin={systemParams?.reserveRatioMin} - reserveRatioMax={systemParams?.reserveRatioMax} showCurrentReserveRatio={Number(coinsDetails?.unscaledNumberSc) > 0} isShu={isShu} /> diff --git a/src/routes/reservecoin.jsx b/src/routes/reservecoin.jsx index 2c012bf..2feb161 100644 --- a/src/routes/reservecoin.jsx +++ b/src/routes/reservecoin.jsx @@ -27,13 +27,12 @@ import { checkSellableRc, verifyTx, BC_DECIMALS, - calculateTxFees, isTxLimitReached, DJED_ADDRESS, FEE_UI_UNSCALED, UI } from "../utils/ethereum"; -import { BigNumber, ethers } from "ethers"; +import { ethers } from "ethers"; import { ConnectWSCButton, TransactionConfigWSCProvider, @@ -56,13 +55,7 @@ export default function ReserveCoin() { account, signer, systemParams, - isRatioBelowMax, - isRatioAboveMin, - isShu, - coinContracts, - getFutureScPrice, - getFutureMinScPrice, - getFutureMaxScPrice + coinContracts } = useAppProvider(); const { isWSCConnected } = useWSCProvider(); const { setOpen } = useWSCModal(); @@ -97,23 +90,6 @@ export default function ReserveCoin() { amountScaled ); - const futureSCPrice = isShu - ? await getFutureMinScPrice({ - amountBC: data.totalUnscaled, - amountSC: 0 - }) - : await getFutureScPrice({ - amountBC: data.totalUnscaled, - amountSC: 0 - }); - - const { f } = calculateTxFees(data.totalUnscaled, systemParams?.feeUnscaled, 0); - const isRatioBelowMaximum = isRatioBelowMax({ - scPrice: BigNumber.from(futureSCPrice), - reserveBc: BigNumber.from(coinsDetails?.unscaledReserveBc).add( - BigNumber.from(data.totalUnscaled).add(f) - ) - }); const bcUsdEquivalent = calculateBcUsdEquivalent( coinsDetails, parseFloat(data.totalScaled.replaceAll(",", "")) @@ -138,8 +114,6 @@ export default function ReserveCoin() { ) ) { setBuyValidity(TRANSACTION_VALIDITY.INSUFFICIENT_BC); - } else if (!isRatioBelowMaximum) { - setBuyValidity(TRANSACTION_VALIDITY.RESERVE_RATIO_HIGH); } else { checkBuyableRc( djedContract, @@ -171,23 +145,6 @@ export default function ReserveCoin() { coinsDetails, parseFloat(data.amountScaled.replaceAll(",", "")) ).replaceAll(",", ""); - const futureSCPrice = isShu - ? await getFutureMaxScPrice({ - amountBC: data.totalUnscaled, - amountSC: 0 - }) - : await getFutureScPrice({ - amountBC: data.totalUnscaled, - amountSC: 0 - }); - const { f } = calculateTxFees(data.totalUnscaled, systemParams?.feeUnscaled, 0); - const isRatioAboveMinimum = isRatioAboveMin({ - totalScSupply: BigNumber.from(coinsDetails?.unscaledNumberSc), - scPrice: BigNumber.from(futureSCPrice), - reserveBc: BigNumber.from(coinsDetails?.unscaledReserveBc).sub( - BigNumber.from(data.totalUnscaled).sub(f) - ) - }); setTradeData(data); if (!isWalletConnected) { @@ -208,8 +165,6 @@ export default function ReserveCoin() { ) ) { setSellValidity(TRANSACTION_VALIDITY.INSUFFICIENT_RC); - } else if (!isRatioAboveMinimum) { - setSellValidity(TRANSACTION_VALIDITY.RESERVE_RATIO_LOW); } else { checkSellableRc( djedContract, @@ -322,7 +277,7 @@ export default function ReserveCoin() {

A ReserveCoin represents a portion of the surplus of the underlying reserves - of {process.env.REACT_APP_CHAIN_COIN} in the Djed protocol. As such, + of {process.env.REACT_APP_CHAIN_COIN} in the Djed Tefnut protocol. As such, ReserveCoins have a leveraged volatile price that increases when the price of {process.env.REACT_APP_CHAIN_COIN} increases and decreases when the price of {process.env.REACT_APP_CHAIN_COIN} decreases. Furthermore, ReserveCoin @@ -331,15 +286,9 @@ export default function ReserveCoin() { surplus.

- You are allowed to buy ReserveCoins, as long as the reserve ratio remains - below the maximum of {systemParams?.reserveRatioMax}. This prevents - excessive dilution of previous ReserveCoin holders. This restriction only - applies when the StableCoin supply is above 500000. -

-

- You are allowed to sell ReserveCoins, as long as the reserve ratio remains - above the minimum of {systemParams?.reserveRatioMin}. This aims to ensure - that all StableCoins remain sufficiently backed. + You are always allowed to buy and sell ReserveCoins. Djed Tefnut has no minimum + or maximum reserve ratio restrictions, allowing unrestricted minting and + redemption of ReserveCoins at any time.

There is a limit of {process.env.REACT_APP_LIMIT_PER_TXN} USD worth of{" "} diff --git a/src/routes/stablecoin.jsx b/src/routes/stablecoin.jsx index a8848a1..8ca9a5a 100644 --- a/src/routes/stablecoin.jsx +++ b/src/routes/stablecoin.jsx @@ -25,13 +25,12 @@ import { checkSellableSc, verifyTx, BC_DECIMALS, - calculateTxFees, isTxLimitReached, DJED_ADDRESS, FEE_UI_UNSCALED, UI } from "../utils/ethereum"; -import { BigNumber, ethers } from "ethers"; +import { ethers } from "ethers"; import { useAccount } from "wagmi"; import djedArtifact from "../artifacts/Djed.json"; import { @@ -55,10 +54,7 @@ export default function Stablecoin() { account, signer, systemParams, - isRatioAboveMin, - coinContracts, - getFutureScPrice, - getFutureMaxScPrice + coinContracts } = useAppProvider(); const { isWSCConnected } = useWSCProvider(); const { setOpen } = useWSCModal(); @@ -95,27 +91,6 @@ export default function Stablecoin() { isShu ? "scMaxPrice" : "scPrice" ); - const futureSCPrice = isShu - ? await getFutureMaxScPrice({ - amountBC: data.totalUnscaled, - amountSC: data.amountUnscaled - }) - : await getFutureScPrice({ - amountBC: data.totalUnscaled, - amountSC: data.amountUnscaled - }); - - const { f } = calculateTxFees(data.totalUnscaled, systemParams?.feeUnscaled, 0); - const isRatioAboveMinimum = isRatioAboveMin({ - totalScSupply: BigNumber.from(coinsDetails?.unscaledNumberSc).add( - BigNumber.from(data.amountUnscaled) - ), - scPrice: BigNumber.from(futureSCPrice), - reserveBc: BigNumber.from(coinsDetails?.unscaledReserveBc).add( - BigNumber.from(data.totalUnscaled).add(f) - ) - }); - setTradeData(data); if (!isWalletConnected) { setBuyValidity(TRANSACTION_VALIDITY.WALLET_NOT_CONNECTED); @@ -135,8 +110,6 @@ export default function Stablecoin() { ) ) { setBuyValidity(TRANSACTION_VALIDITY.INSUFFICIENT_BC); - } else if (!isRatioAboveMinimum) { - setBuyValidity(TRANSACTION_VALIDITY.RESERVE_RATIO_LOW); } else { checkBuyableSc( djedContract, @@ -292,7 +265,7 @@ export default function Stablecoin() {

StableCoin {/*Name*/}

- The StableCoin of this Djed deployment is called{" "} + The StableCoin of this Djed Tefnut deployment is called{" "} {process.env.REACT_APP_SC_NAME}. It is pegged to the USD, similarly to various{" "} , at a ratio of 1 to 1. One Djed Stablecoin is nominally worth 1 USD. The peg is maintained through a reserve of {process.env.REACT_APP_CHAIN_COIN}. - The Djed protocol aims to maintain a reserve ratio between{" "} - {systemParams?.reserveRatioMin} and {systemParams?.reserveRatioMax}. This - means that, when the reserve ratio is in this range, every StableCoin is - backed by an amount of {process.env.REACT_APP_CHAIN_COIN} worth at least 4 - USD and is able to tolerate an instantaneous{" "} - {process.env.REACT_APP_CHAIN_COIN} price crash of at least 75%.

You are always allowed to sell back StableCoins to Djed. Djed pays 1 USD @@ -318,11 +285,10 @@ export default function Stablecoin() { {process.env.REACT_APP_CHAIN_COIN} reserve and S is the StableCoin supply.

- You are allowed to buy StableCoins from Djed for a price of 1 USD worth of - {process.env.REACT_APP_CHAIN_COIN} per StableCoin, whenever the reserve - ratio is above {systemParams?.reserveRatioMin}. When the reserve ratio is - below {systemParams?.reserveRatioMin}, the purchase of StableCoins from Djed - is disallowed, because it would reduce the reserve ratio further. + You are always allowed to buy StableCoins from Djed for a price of 1 USD worth of{" "} + {process.env.REACT_APP_CHAIN_COIN} per StableCoin. Djed Tefnut has no minimum + or maximum reserve ratio restrictions, allowing unrestricted minting and + redemption of StableCoins at any time.

There is a limit of {process.env.REACT_APP_LIMIT_PER_TXN} USD worth of{" "} diff --git a/src/utils/constants.js b/src/utils/constants.js index 072c54a..3a7f3b4 100644 --- a/src/utils/constants.js +++ b/src/utils/constants.js @@ -13,8 +13,6 @@ export const TRANSACTION_VALIDITY = { INSUFFICIENT_BC: "Insufficient balance", INSUFFICIENT_SC: "Insufficient StableCoin balance", INSUFFICIENT_RC: "Insufficient ReserveCoin balance", - RESERVE_RATIO_LOW: "Reserve ratio would drop below the minimum", - RESERVE_RATIO_HIGH: "Reserve ratio would rise above the maximum", TRANSACTION_LIMIT_REACHED: "Transaction limit reached" }; diff --git a/src/utils/ethereum.js b/src/utils/ethereum.js index 7c21f88..a65b6e6 100644 --- a/src/utils/ethereum.js +++ b/src/utils/ethereum.js @@ -2,7 +2,7 @@ import Web3 from "web3"; import djedArtifact from "../artifacts/Djed.json"; import coinArtifact from "../artifacts/Coin.json"; import oracleArtifact from "../artifacts/Oracle.json"; -import djedShuArtifact from "../artifacts/DjedShu.json"; +import djedTefnutArtifact from "../artifacts/DjedTefnut.json"; import shuOracleArtifact from "../artifacts/ShuOracle.json"; import { @@ -58,7 +58,13 @@ export const getDjedContract = (web3) => { }; export const getDjedShuContract = (web3) => { - const djed = new web3.eth.Contract(djedShuArtifact.abi, DJED_SHU_ADDRESS); + // Using DjedTefnut artifact for Tefnut deployment (simplified Djed) + const djed = new web3.eth.Contract(djedTefnutArtifact.abi, DJED_SHU_ADDRESS); + return djed; +}; + +export const getDjedTefnutContract = (web3) => { + const djed = new web3.eth.Contract(djedTefnutArtifact.abi, DJED_SHU_ADDRESS); return djed; }; @@ -156,6 +162,7 @@ export const getCoinDetails = async ( }; }; +// Tefnut coin details - simplified version without reserve ratio limits export const getShuCoinDetails = async ( stableCoin, reserveCoin, @@ -181,26 +188,34 @@ export const getShuCoinDetails = async ( const emptyValue = decimalScaling("0".toString(10), BC_DECIMALS); let scaledSellPriceRc = emptyValue; let unscaledSellPriceRc = emptyValue; - let percentReserveRatio = emptyValue; + // Tefnut has no reserve ratio limits - just calculate current ratio if there's SC supply + let percentReserveRatio = "N/A"; const scaledScExchangeRate = ( (parseFloat(scaledMinPriceSc) + parseFloat(scaledMaxPriceSc)) / 2 ).toString(); - //Check total stablecoin supply + //Check total reservecoin supply for RC sell price if (!BigNumber.from(unscaledNumberRc).isZero()) { [scaledSellPriceRc, unscaledSellPriceRc] = await scaledUnscaledPromise( web3Promise(djed, "rcTargetPrice", 0), BC_DECIMALS ); } - //Check total reservecoin supply + + // Tefnut: Calculate current reserve ratio from ratio() if SC supply exists if (!BigNumber.from(unscaledNumberSc).isZero()) { - percentReserveRatio = [ - await percentScaledPromise(web3Promise(djed, "ratioMin"), SCALING_DECIMALS), - await percentScaledPromise(web3Promise(djed, "ratioMax"), SCALING_DECIMALS) - ]; + try { + percentReserveRatio = await percentScaledPromise( + web3Promise(djed, "ratio"), + SCALING_DECIMALS + ); + } catch (e) { + // ratio() might not exist, use N/A + percentReserveRatio = "N/A"; + } } + return { scaledNumberSc, unscaledNumberSc, @@ -220,26 +235,27 @@ export const getShuCoinDetails = async ( }; }; +// Get system params - supports both Tefnut (uppercase) and legacy (lowercase) method names export const getSystemParams = async (djed) => { - const [ - reserveRatioMinUnscaled, - reserveRatioMaxUnscaled, - feeUnscaled, - treasuryFee, - thresholdSupplySC - ] = await Promise.all([ - web3Promise(djed, "reserveRatioMin"), - web3Promise(djed, "reserveRatioMax"), - web3Promise(djed, "fee"), - percentScaledPromise(web3Promise(djed, "treasuryFee"), SCALING_DECIMALS), - web3Promise(djed, "thresholdSupplySC") - ]); + let feeUnscaled, treasuryFee, thresholdSupplySC; + + try { + // Try Tefnut uppercase constant names first + [feeUnscaled, treasuryFee, thresholdSupplySC] = await Promise.all([ + web3Promise(djed, "FEE"), + percentScaledPromise(web3Promise(djed, "TREASURY_FEE"), SCALING_DECIMALS), + web3Promise(djed, "THRESHOLD_SUPPLY_SC") + ]); + } catch (e) { + // Fallback to legacy lowercase method names + [feeUnscaled, treasuryFee, thresholdSupplySC] = await Promise.all([ + web3Promise(djed, "fee"), + percentScaledPromise(web3Promise(djed, "treasuryFee"), SCALING_DECIMALS), + web3Promise(djed, "thresholdSupplySC") + ]); + } return { - reserveRatioMin: percentageScale(reserveRatioMinUnscaled, SCALING_DECIMALS, true), - reserveRatioMax: percentageScale(reserveRatioMaxUnscaled, SCALING_DECIMALS, true), - reserveRatioMinUnscaled, - reserveRatioMaxUnscaled, fee: percentageScale(feeUnscaled, SCALING_DECIMALS, true), feeUnscaled, treasuryFee, @@ -579,57 +595,6 @@ export const checkSellableSc = (unscaledAmountSc, unscaledBalanceSc) => { return new Promise((r) => r(TRANSACTION_VALIDITY.OK)); }; -/** - * Calculate if the transaction will reach the maximum reserve ratio - * @param scPrice - Unscaled stablecoin price - * @param reserveBc - Unscaled reserve of base coin with appended potential transaction amount. - * Example: If user wants to buy 1RC, the reserveBc param will be calculated as sum of current reserve of BC and desired RC amount converted in BC - * @param totalScSupply - Unscaled total stablecoin supply - * @param reserveRatioMax - Unscaled maximum reserve ratio - * @param scDecimalScalingFactor - If stablecoin has 6 decimals, scDecimalScalingFactor will be calculated as 10^6 - * @param thresholdSupplySC - Unscaled threshold SC supply - * @returns - */ -export const calculateIsRatioBelowMax = ({ - scPrice, - reserveBc, - totalScSupply, - reserveRatioMax, - scDecimalScalingFactor, - thresholdSupplySC -}) => { - return ( - reserveBc - .mul(BigNumber.from(scalingFactor)) - .mul(scDecimalScalingFactor) - .lt(totalScSupply.mul(scPrice).mul(reserveRatioMax)) || - totalScSupply.lte(thresholdSupplySC) - ); -}; - -/** - * Calculate if the transaction will reach the minimum reserve ratio - * @param scPrice - Unscaled stablecoin price - * @param reserveBc - Unscaled reserve of base coin with calculated potential transaction amount. - * Example: If user wants to buy 1SC, the reserveBc param will be calculated as sum of current reserve of BC and desired SC amount converted in BC - * @param totalScSupply - Unscaled total stablecoin supply - * @param reserveRatioMin - Unscaled minimum reserve ratio - * @param scDecimalScalingFactor - If stablecoin has 6 decimals, scDecimalScalingFactor will be calculated as 10^6 - * @returns - */ -export const calculateIsRatioAboveMin = ({ - scPrice, - reserveBc, - totalScSupply, - reserveRatioMin, - scDecimalScalingFactor -}) => { - return reserveBc - .mul(BigNumber.from(scalingFactor)) - .mul(scDecimalScalingFactor) - .gt(totalScSupply.mul(scPrice).mul(reserveRatioMin)); -}; - /** * * @param {*} amountUSD