{"matchId":"9866565","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2025-11-09T21:52:41Z","creationBytecode":{"onchainBytecode":"0x608060405234801561001057600080fd5b50604051612537380380612537833981810160405281019061003291906107ea565b33838381600390816100449190610a8c565b5080600490816100549190610a8c565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100c95760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100c09190610b9f565b60405180910390fd5b6100d88161015460201b60201c565b506100f66100ea61021a60201b60201c565b8261024460201b60201c565b600260078190555061010c61021a60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050610d67565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102b65760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102ad9190610b9f565b60405180910390fd5b6102c8600083836102cc60201b60201c565b5050565b600160075403610311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030890610c17565b60405180910390fd5b60026007540361040457600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806103c45750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103fa90610c83565b60405180910390fd5b5b61041583838361041a60201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361046c5780600260008282546104609190610cd2565b9250508190555061053f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156104f8578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016104ef93929190610d15565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361058857806002600082825403925050819055506105d5565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106329190610d4c565b60405180910390a3505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6106a68261065d565b810181811067ffffffffffffffff821117156106c5576106c461066e565b5b80604052505050565b60006106d861063f565b90506106e4828261069d565b919050565b600067ffffffffffffffff8211156107045761070361066e565b5b61070d8261065d565b9050602081019050919050565b60005b8381101561073857808201518184015260208101905061071d565b60008484015250505050565b6000610757610752846106e9565b6106ce565b90508281526020810184848401111561077357610772610658565b5b61077e84828561071a565b509392505050565b600082601f83011261079b5761079a610653565b5b81516107ab848260208601610744565b91505092915050565b6000819050919050565b6107c7816107b4565b81146107d257600080fd5b50565b6000815190506107e4816107be565b92915050565b60008060006060848603121561080357610802610649565b5b600084015167ffffffffffffffff8111156108215761082061064e565b5b61082d86828701610786565b935050602084015167ffffffffffffffff81111561084e5761084d61064e565b5b61085a86828701610786565b925050604061086b868287016107d5565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806108c757607f821691505b6020821081036108da576108d9610880565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026109427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610905565b61094c8683610905565b95508019841693508086168417925050509392505050565b6000819050919050565b600061098961098461097f846107b4565b610964565b6107b4565b9050919050565b6000819050919050565b6109a38361096e565b6109b76109af82610990565b848454610912565b825550505050565b600090565b6109cc6109bf565b6109d781848461099a565b505050565b5b818110156109fb576109f06000826109c4565b6001810190506109dd565b5050565b601f821115610a4057610a11816108e0565b610a1a846108f5565b81016020851015610a29578190505b610a3d610a35856108f5565b8301826109dc565b50505b505050565b600082821c905092915050565b6000610a6360001984600802610a45565b1980831691505092915050565b6000610a7c8383610a52565b9150826002028217905092915050565b610a9582610875565b67ffffffffffffffff811115610aae57610aad61066e565b5b610ab882546108af565b610ac38282856109ff565b600060209050601f831160018114610af65760008415610ae4578287015190505b610aee8582610a70565b865550610b56565b601f198416610b04866108e0565b60005b82811015610b2c57848901518255600182019150602085019450602081019050610b07565b86831015610b495784890151610b45601f891682610a52565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b8982610b5e565b9050919050565b610b9981610b7e565b82525050565b6000602082019050610bb46000830184610b90565b92915050565b600082825260208201905092915050565b7f5472616e73666572206973207265737472696374656400000000000000000000600082015250565b6000610c01601683610bba565b9150610c0c82610bcb565b602082019050919050565b60006020820190508181036000830152610c3081610bf4565b9050919050565b7f496e76616c6964207472616e7366657200000000000000000000000000000000600082015250565b6000610c6d601083610bba565b9150610c7882610c37565b602082019050919050565b60006020820190508181036000830152610c9c81610c60565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610cdd826107b4565b9150610ce8836107b4565b9250828201905080821115610d0057610cff610ca3565b5b92915050565b610d0f816107b4565b82525050565b6000606082019050610d2a6000830186610b90565b610d376020830185610d06565b610d446040830184610d06565b949350505050565b6000602082019050610d616000830184610d06565b92915050565b6117c180610d766000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063b217ee9711610071578063b217ee97146102ac578063bce62270146102dc578063dd62ed3e146102f8578063f2fde38b14610328578063ffc339c6146103445761010b565b80638da5cb5b1461022257806395d89b41146102405780639a1565971461025e578063a9059cbb1461027c5761010b565b80632a5868ff116100de5780632a5868ff146101ac578063313ce567146101ca57806370a08231146101e8578063715018a6146102185761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610360565b60405161012591906111c0565b60405180910390f35b6101486004803603810190610143919061127b565b6103f2565b60405161015591906112d6565b60405180910390f35b610166610415565b6040516101739190611300565b60405180910390f35b6101966004803603810190610191919061131b565b61041f565b6040516101a391906112d6565b60405180910390f35b6101b461044e565b6040516101c1919061137d565b60405180910390f35b6101d2610474565b6040516101df91906113b4565b60405180910390f35b61020260048036038101906101fd91906113cf565b61047d565b60405161020f9190611300565b60405180910390f35b6102206104c5565b005b61022a6104d9565b604051610237919061137d565b60405180910390f35b610248610503565b60405161025591906111c0565b60405180910390f35b610266610595565b6040516102739190611300565b60405180910390f35b6102966004803603810190610291919061127b565b61059b565b6040516102a391906112d6565b60405180910390f35b6102c660048036038101906102c191906113cf565b6105be565b6040516102d391906112d6565b60405180910390f35b6102f660048036038101906102f191906113fc565b610618565b005b610312600480360381019061030d9190611429565b610742565b60405161031f9190611300565b60405180910390f35b610342600480360381019061033d91906113cf565b6107c9565b005b61035e600480360381019061035991906113cf565b61084f565b005b60606003805461036f90611498565b80601f016020809104026020016040519081016040528092919081815260200182805461039b90611498565b80156103e85780601f106103bd576101008083540402835291602001916103e8565b820191906000526020600020905b8154815290600101906020018083116103cb57829003601f168201915b5050505050905090565b6000806103fd6108fc565b905061040a818585610904565b600191505092915050565b6000600254905090565b60008061042a6108fc565b9050610437858285610916565b6104428585856109ab565b60019150509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104cd610a9f565b6104d76000610b26565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461051290611498565b80601f016020809104026020016040519081016040528092919081815260200182805461053e90611498565b801561058b5780601f106105605761010080835404028352916020019161058b565b820191906000526020600020905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b60075481565b6000806105a66108fc565b90506105b38185856109ab565b600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f9061153b565b60405180910390fd5b60028111156106ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e3906115a7565b60405180910390fd5b60006007541461073f5760006007549050816007819055507f229aa33713d83257590af14156bb876c7928c6060a46edd8d19b7460ff431d6681836040516107359291906115c7565b60405180910390a1505b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6107d1610a9f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108435760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161083a919061137d565b60405180910390fd5b61084c81610b26565b50565b610857610a9f565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f18a20cd8522a3b9ece246a60b00675f1924437ea8112ca07f7c4bfb4294296b981836040516108f09291906115f0565b60405180910390a15050565b600033905090565b6109118383836001610bec565b505050565b60006109228484610742565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156109a55781811015610995578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161098c93929190611619565b60405180910390fd5b6109a484848484036000610bec565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a1d5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a14919061137d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8f5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a86919061137d565b60405180910390fd5b610a9a838383610dc3565b505050565b610aa76108fc565b73ffffffffffffffffffffffffffffffffffffffff16610ac56104d9565b73ffffffffffffffffffffffffffffffffffffffff1614610b2457610ae86108fc565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b1b919061137d565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610c5e5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610c55919061137d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cd05760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610cc7919061137d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610dbd578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610db49190611300565b60405180910390a35b50505050565b600160075403610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff9061169c565b60405180910390fd5b600260075403610efb57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ebb5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190611708565b60405180910390fd5b5b610f06838383610f0b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5d578060026000828254610f519190611757565b92505081905550611030565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fe9578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610fe093929190611619565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107957806002600082825403925050819055506110c6565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111239190611300565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561116a57808201518184015260208101905061114f565b60008484015250505050565b6000601f19601f8301169050919050565b600061119282611130565b61119c818561113b565b93506111ac81856020860161114c565b6111b581611176565b840191505092915050565b600060208201905081810360008301526111da8184611187565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611212826111e7565b9050919050565b61122281611207565b811461122d57600080fd5b50565b60008135905061123f81611219565b92915050565b6000819050919050565b61125881611245565b811461126357600080fd5b50565b6000813590506112758161124f565b92915050565b60008060408385031215611292576112916111e2565b5b60006112a085828601611230565b92505060206112b185828601611266565b9150509250929050565b60008115159050919050565b6112d0816112bb565b82525050565b60006020820190506112eb60008301846112c7565b92915050565b6112fa81611245565b82525050565b600060208201905061131560008301846112f1565b92915050565b600080600060608486031215611334576113336111e2565b5b600061134286828701611230565b935050602061135386828701611230565b925050604061136486828701611266565b9150509250925092565b61137781611207565b82525050565b6000602082019050611392600083018461136e565b92915050565b600060ff82169050919050565b6113ae81611398565b82525050565b60006020820190506113c960008301846113a5565b92915050565b6000602082840312156113e5576113e46111e2565b5b60006113f384828501611230565b91505092915050565b600060208284031215611412576114116111e2565b5b600061142084828501611266565b91505092915050565b600080604083850312156114405761143f6111e2565b5b600061144e85828601611230565b925050602061145f85828601611230565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114b057607f821691505b6020821081036114c3576114c2611469565b5b50919050565b7f43616c6c6572206973206e6f7420746865207472616e7366657220636f6e747260008201527f6f6c6c6572000000000000000000000000000000000000000000000000000000602082015250565b600061152560258361113b565b9150611530826114c9565b604082019050919050565b6000602082019050818103600083015261155481611518565b9050919050565b7f496e76616c6964206d6f64650000000000000000000000000000000000000000600082015250565b6000611591600c8361113b565b915061159c8261155b565b602082019050919050565b600060208201905081810360008301526115c081611584565b9050919050565b60006040820190506115dc60008301856112f1565b6115e960208301846112f1565b9392505050565b6000604082019050611605600083018561136e565b611612602083018461136e565b9392505050565b600060608201905061162e600083018661136e565b61163b60208301856112f1565b61164860408301846112f1565b949350505050565b7f5472616e73666572206973207265737472696374656400000000000000000000600082015250565b600061168660168361113b565b915061169182611650565b602082019050919050565b600060208201905081810360008301526116b581611679565b9050919050565b7f496e76616c6964207472616e7366657200000000000000000000000000000000600082015250565b60006116f260108361113b565b91506116fd826116bc565b602082019050919050565b60006020820190508181036000830152611721816116e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061176282611245565b915061176d83611245565b925082820190508082111561178557611784611728565b5b9291505056fea26469706673582212202d41cdab85fc4fb4f0f3e1277d1610a03fd947042d57b800fcd04c1cfc56ca1764736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000001431e0fae6d7217caa00000000000000000000000000000000000000000000000000000000000000000000003414b4500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003414b450000000000000000000000000000000000000000000000000000000000","recompiledBytecode":"0x608060405234801561001057600080fd5b50604051612537380380612537833981810160405281019061003291906107ea565b33838381600390816100449190610a8c565b5080600490816100549190610a8c565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100c95760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100c09190610b9f565b60405180910390fd5b6100d88161015460201b60201c565b506100f66100ea61021a60201b60201c565b8261024460201b60201c565b600260078190555061010c61021a60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050610d67565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102b65760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102ad9190610b9f565b60405180910390fd5b6102c8600083836102cc60201b60201c565b5050565b600160075403610311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030890610c17565b60405180910390fd5b60026007540361040457600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806103c45750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103fa90610c83565b60405180910390fd5b5b61041583838361041a60201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361046c5780600260008282546104609190610cd2565b9250508190555061053f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156104f8578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016104ef93929190610d15565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361058857806002600082825403925050819055506105d5565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106329190610d4c565b60405180910390a3505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6106a68261065d565b810181811067ffffffffffffffff821117156106c5576106c461066e565b5b80604052505050565b60006106d861063f565b90506106e4828261069d565b919050565b600067ffffffffffffffff8211156107045761070361066e565b5b61070d8261065d565b9050602081019050919050565b60005b8381101561073857808201518184015260208101905061071d565b60008484015250505050565b6000610757610752846106e9565b6106ce565b90508281526020810184848401111561077357610772610658565b5b61077e84828561071a565b509392505050565b600082601f83011261079b5761079a610653565b5b81516107ab848260208601610744565b91505092915050565b6000819050919050565b6107c7816107b4565b81146107d257600080fd5b50565b6000815190506107e4816107be565b92915050565b60008060006060848603121561080357610802610649565b5b600084015167ffffffffffffffff8111156108215761082061064e565b5b61082d86828701610786565b935050602084015167ffffffffffffffff81111561084e5761084d61064e565b5b61085a86828701610786565b925050604061086b868287016107d5565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806108c757607f821691505b6020821081036108da576108d9610880565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026109427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610905565b61094c8683610905565b95508019841693508086168417925050509392505050565b6000819050919050565b600061098961098461097f846107b4565b610964565b6107b4565b9050919050565b6000819050919050565b6109a38361096e565b6109b76109af82610990565b848454610912565b825550505050565b600090565b6109cc6109bf565b6109d781848461099a565b505050565b5b818110156109fb576109f06000826109c4565b6001810190506109dd565b5050565b601f821115610a4057610a11816108e0565b610a1a846108f5565b81016020851015610a29578190505b610a3d610a35856108f5565b8301826109dc565b50505b505050565b600082821c905092915050565b6000610a6360001984600802610a45565b1980831691505092915050565b6000610a7c8383610a52565b9150826002028217905092915050565b610a9582610875565b67ffffffffffffffff811115610aae57610aad61066e565b5b610ab882546108af565b610ac38282856109ff565b600060209050601f831160018114610af65760008415610ae4578287015190505b610aee8582610a70565b865550610b56565b601f198416610b04866108e0565b60005b82811015610b2c57848901518255600182019150602085019450602081019050610b07565b86831015610b495784890151610b45601f891682610a52565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b8982610b5e565b9050919050565b610b9981610b7e565b82525050565b6000602082019050610bb46000830184610b90565b92915050565b600082825260208201905092915050565b7f5472616e73666572206973207265737472696374656400000000000000000000600082015250565b6000610c01601683610bba565b9150610c0c82610bcb565b602082019050919050565b60006020820190508181036000830152610c3081610bf4565b9050919050565b7f496e76616c6964207472616e7366657200000000000000000000000000000000600082015250565b6000610c6d601083610bba565b9150610c7882610c37565b602082019050919050565b60006020820190508181036000830152610c9c81610c60565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610cdd826107b4565b9150610ce8836107b4565b9250828201905080821115610d0057610cff610ca3565b5b92915050565b610d0f816107b4565b82525050565b6000606082019050610d2a6000830186610b90565b610d376020830185610d06565b610d446040830184610d06565b949350505050565b6000602082019050610d616000830184610d06565b92915050565b6117c180610d766000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063b217ee9711610071578063b217ee97146102ac578063bce62270146102dc578063dd62ed3e146102f8578063f2fde38b14610328578063ffc339c6146103445761010b565b80638da5cb5b1461022257806395d89b41146102405780639a1565971461025e578063a9059cbb1461027c5761010b565b80632a5868ff116100de5780632a5868ff146101ac578063313ce567146101ca57806370a08231146101e8578063715018a6146102185761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610360565b60405161012591906111c0565b60405180910390f35b6101486004803603810190610143919061127b565b6103f2565b60405161015591906112d6565b60405180910390f35b610166610415565b6040516101739190611300565b60405180910390f35b6101966004803603810190610191919061131b565b61041f565b6040516101a391906112d6565b60405180910390f35b6101b461044e565b6040516101c1919061137d565b60405180910390f35b6101d2610474565b6040516101df91906113b4565b60405180910390f35b61020260048036038101906101fd91906113cf565b61047d565b60405161020f9190611300565b60405180910390f35b6102206104c5565b005b61022a6104d9565b604051610237919061137d565b60405180910390f35b610248610503565b60405161025591906111c0565b60405180910390f35b610266610595565b6040516102739190611300565b60405180910390f35b6102966004803603810190610291919061127b565b61059b565b6040516102a391906112d6565b60405180910390f35b6102c660048036038101906102c191906113cf565b6105be565b6040516102d391906112d6565b60405180910390f35b6102f660048036038101906102f191906113fc565b610618565b005b610312600480360381019061030d9190611429565b610742565b60405161031f9190611300565b60405180910390f35b610342600480360381019061033d91906113cf565b6107c9565b005b61035e600480360381019061035991906113cf565b61084f565b005b60606003805461036f90611498565b80601f016020809104026020016040519081016040528092919081815260200182805461039b90611498565b80156103e85780601f106103bd576101008083540402835291602001916103e8565b820191906000526020600020905b8154815290600101906020018083116103cb57829003601f168201915b5050505050905090565b6000806103fd6108fc565b905061040a818585610904565b600191505092915050565b6000600254905090565b60008061042a6108fc565b9050610437858285610916565b6104428585856109ab565b60019150509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104cd610a9f565b6104d76000610b26565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461051290611498565b80601f016020809104026020016040519081016040528092919081815260200182805461053e90611498565b801561058b5780601f106105605761010080835404028352916020019161058b565b820191906000526020600020905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b60075481565b6000806105a66108fc565b90506105b38185856109ab565b600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f9061153b565b60405180910390fd5b60028111156106ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e3906115a7565b60405180910390fd5b60006007541461073f5760006007549050816007819055507f229aa33713d83257590af14156bb876c7928c6060a46edd8d19b7460ff431d6681836040516107359291906115c7565b60405180910390a1505b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6107d1610a9f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108435760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161083a919061137d565b60405180910390fd5b61084c81610b26565b50565b610857610a9f565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f18a20cd8522a3b9ece246a60b00675f1924437ea8112ca07f7c4bfb4294296b981836040516108f09291906115f0565b60405180910390a15050565b600033905090565b6109118383836001610bec565b505050565b60006109228484610742565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156109a55781811015610995578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161098c93929190611619565b60405180910390fd5b6109a484848484036000610bec565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a1d5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a14919061137d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8f5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a86919061137d565b60405180910390fd5b610a9a838383610dc3565b505050565b610aa76108fc565b73ffffffffffffffffffffffffffffffffffffffff16610ac56104d9565b73ffffffffffffffffffffffffffffffffffffffff1614610b2457610ae86108fc565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b1b919061137d565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610c5e5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610c55919061137d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cd05760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610cc7919061137d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610dbd578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610db49190611300565b60405180910390a35b50505050565b600160075403610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff9061169c565b60405180910390fd5b600260075403610efb57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ebb5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190611708565b60405180910390fd5b5b610f06838383610f0b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5d578060026000828254610f519190611757565b92505081905550611030565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fe9578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610fe093929190611619565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107957806002600082825403925050819055506110c6565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111239190611300565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561116a57808201518184015260208101905061114f565b60008484015250505050565b6000601f19601f8301169050919050565b600061119282611130565b61119c818561113b565b93506111ac81856020860161114c565b6111b581611176565b840191505092915050565b600060208201905081810360008301526111da8184611187565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611212826111e7565b9050919050565b61122281611207565b811461122d57600080fd5b50565b60008135905061123f81611219565b92915050565b6000819050919050565b61125881611245565b811461126357600080fd5b50565b6000813590506112758161124f565b92915050565b60008060408385031215611292576112916111e2565b5b60006112a085828601611230565b92505060206112b185828601611266565b9150509250929050565b60008115159050919050565b6112d0816112bb565b82525050565b60006020820190506112eb60008301846112c7565b92915050565b6112fa81611245565b82525050565b600060208201905061131560008301846112f1565b92915050565b600080600060608486031215611334576113336111e2565b5b600061134286828701611230565b935050602061135386828701611230565b925050604061136486828701611266565b9150509250925092565b61137781611207565b82525050565b6000602082019050611392600083018461136e565b92915050565b600060ff82169050919050565b6113ae81611398565b82525050565b60006020820190506113c960008301846113a5565b92915050565b6000602082840312156113e5576113e46111e2565b5b60006113f384828501611230565b91505092915050565b600060208284031215611412576114116111e2565b5b600061142084828501611266565b91505092915050565b600080604083850312156114405761143f6111e2565b5b600061144e85828601611230565b925050602061145f85828601611230565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114b057607f821691505b6020821081036114c3576114c2611469565b5b50919050565b7f43616c6c6572206973206e6f7420746865207472616e7366657220636f6e747260008201527f6f6c6c6572000000000000000000000000000000000000000000000000000000602082015250565b600061152560258361113b565b9150611530826114c9565b604082019050919050565b6000602082019050818103600083015261155481611518565b9050919050565b7f496e76616c6964206d6f64650000000000000000000000000000000000000000600082015250565b6000611591600c8361113b565b915061159c8261155b565b602082019050919050565b600060208201905081810360008301526115c081611584565b9050919050565b60006040820190506115dc60008301856112f1565b6115e960208301846112f1565b9392505050565b6000604082019050611605600083018561136e565b611612602083018461136e565b9392505050565b600060608201905061162e600083018661136e565b61163b60208301856112f1565b61164860408301846112f1565b949350505050565b7f5472616e73666572206973207265737472696374656400000000000000000000600082015250565b600061168660168361113b565b915061169182611650565b602082019050919050565b600060208201905081810360008301526116b581611679565b9050919050565b7f496e76616c6964207472616e7366657200000000000000000000000000000000600082015250565b60006116f260108361113b565b91506116fd826116bc565b602082019050919050565b60006020820190508181036000830152611721816116e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061176282611245565b915061176d83611245565b925082820190508082111561178557611784611728565b5b9291505056fea26469706673582212202d41cdab85fc4fb4f0f3e1277d1610a03fd947042d57b800fcd04c1cfc56ca1764736f6c634300081c0033","sourceMap":"232:2169:6:-:0;;;837:285;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;974:10;952:4;958:6;1656:5:2;1648;:13;;;;;;:::i;:::-;;1681:7;1671;:17;;;;;;:::i;:::-;;1582:113;;1297:1:0;1273:26;;:12;:26;;;1269:95;;1350:1;1322:31;;;;;;;;;;;:::i;:::-;;;;;;;;1269:95;1373:32;1392:12;1373:18;;;:32;;:::i;:::-;1225:187;997:27:6::2;1003:7;:5;;;:7;;:::i;:::-;1012:11;997:5;;;:27;;:::i;:::-;212:1:8;1035:13:6;:39;;;;1107:7;:5;;;:7;;:::i;:::-;1085:19;;:29;;;;;;;;;;;;;;;;;;837:285:::0;;;232:2169;;2912:187:0;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;1638:85::-;1684:7;1710:6;;;;;;;;;;;1703:13;;1638:85;:::o;7439:208:2:-;7528:1;7509:21;;:7;:21;;;7505:91;;7582:1;7553:32;;;;;;;;;;;:::i;:::-;;;;;;;;7505:91;7605:35;7621:1;7625:7;7634:5;7605:7;;;:35;;:::i;:::-;7439:208;;:::o;1130:452:6:-;167:1:8;1264:13:6;;:40;1260:105;;1321:32;;;;;;;;;;:::i;:::-;;;;;;;;1260:105;212:1:8;1379:13:6;;:40;1375:158;;1452:19;;;;;;;;;;;1444:27;;:4;:27;;;:56;;;;1481:19;;;;;;;;;;;1475:25;;:2;:25;;;1444:56;1436:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;1375:158;1543:31;1557:4;1563:2;1567:6;1543:13;;;:31;;:::i;:::-;1130:452;;;:::o;5989:1107:2:-;6094:1;6078:18;;:4;:18;;;6074:540;;6230:5;6214:12;;:21;;;;;;;:::i;:::-;;;;;;;;6074:540;;;6266:19;6288:9;:15;6298:4;6288:15;;;;;;;;;;;;;;;;6266:37;;6335:5;6321:11;:19;6317:115;;;6392:4;6398:11;6411:5;6367:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6317:115;6584:5;6570:11;:19;6552:9;:15;6562:4;6552:15;;;;;;;;;;;;;;;:37;;;;6252:362;6074:540;6642:1;6628:16;;:2;:16;;;6624:425;;6807:5;6791:12;;:21;;;;;;;;;;;6624:425;;;7019:5;7002:9;:13;7012:2;7002:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6624:425;7079:2;7064:25;;7073:4;7064:25;;;7083:5;7064:25;;;;;;:::i;:::-;;;;;;;;5989:1107;;;:::o;7:75:9:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:102;621:6;672:2;668:7;663:2;656:5;652:14;648:28;638:38;;580:102;;;:::o;688:180::-;736:77;733:1;726:88;833:4;830:1;823:15;857:4;854:1;847:15;874:281;957:27;979:4;957:27;:::i;:::-;949:6;945:40;1087:6;1075:10;1072:22;1051:18;1039:10;1036:34;1033:62;1030:88;;;1098:18;;:::i;:::-;1030:88;1138:10;1134:2;1127:22;917:238;874:281;;:::o;1161:129::-;1195:6;1222:20;;:::i;:::-;1212:30;;1251:33;1279:4;1271:6;1251:33;:::i;:::-;1161:129;;;:::o;1296:308::-;1358:4;1448:18;1440:6;1437:30;1434:56;;;1470:18;;:::i;:::-;1434:56;1508:29;1530:6;1508:29;:::i;:::-;1500:37;;1592:4;1586;1582:15;1574:23;;1296:308;;;:::o;1610:248::-;1692:1;1702:113;1716:6;1713:1;1710:13;1702:113;;;1801:1;1796:3;1792:11;1786:18;1782:1;1777:3;1773:11;1766:39;1738:2;1735:1;1731:10;1726:15;;1702:113;;;1849:1;1840:6;1835:3;1831:16;1824:27;1672:186;1610:248;;;:::o;1864:434::-;1953:5;1978:66;1994:49;2036:6;1994:49;:::i;:::-;1978:66;:::i;:::-;1969:75;;2067:6;2060:5;2053:21;2105:4;2098:5;2094:16;2143:3;2134:6;2129:3;2125:16;2122:25;2119:112;;;2150:79;;:::i;:::-;2119:112;2240:52;2285:6;2280:3;2275;2240:52;:::i;:::-;1959:339;1864:434;;;;;:::o;2318:355::-;2385:5;2434:3;2427:4;2419:6;2415:17;2411:27;2401:122;;2442:79;;:::i;:::-;2401:122;2552:6;2546:13;2577:90;2663:3;2655:6;2648:4;2640:6;2636:17;2577:90;:::i;:::-;2568:99;;2391:282;2318:355;;;;:::o;2679:77::-;2716:7;2745:5;2734:16;;2679:77;;;:::o;2762:122::-;2835:24;2853:5;2835:24;:::i;:::-;2828:5;2825:35;2815:63;;2874:1;2871;2864:12;2815:63;2762:122;:::o;2890:143::-;2947:5;2978:6;2972:13;2963:22;;2994:33;3021:5;2994:33;:::i;:::-;2890:143;;;;:::o;3039:1009::-;3147:6;3155;3163;3212:2;3200:9;3191:7;3187:23;3183:32;3180:119;;;3218:79;;:::i;:::-;3180:119;3359:1;3348:9;3344:17;3338:24;3389:18;3381:6;3378:30;3375:117;;;3411:79;;:::i;:::-;3375:117;3516:74;3582:7;3573:6;3562:9;3558:22;3516:74;:::i;:::-;3506:84;;3309:291;3660:2;3649:9;3645:18;3639:25;3691:18;3683:6;3680:30;3677:117;;;3713:79;;:::i;:::-;3677:117;3818:74;3884:7;3875:6;3864:9;3860:22;3818:74;:::i;:::-;3808:84;;3610:292;3941:2;3967:64;4023:7;4014:6;4003:9;3999:22;3967:64;:::i;:::-;3957:74;;3912:129;3039:1009;;;;;:::o;4054:99::-;4106:6;4140:5;4134:12;4124:22;;4054:99;;;:::o;4159:180::-;4207:77;4204:1;4197:88;4304:4;4301:1;4294:15;4328:4;4325:1;4318:15;4345:320;4389:6;4426:1;4420:4;4416:12;4406:22;;4473:1;4467:4;4463:12;4494:18;4484:81;;4550:4;4542:6;4538:17;4528:27;;4484:81;4612:2;4604:6;4601:14;4581:18;4578:38;4575:84;;4631:18;;:::i;:::-;4575:84;4396:269;4345:320;;;:::o;4671:141::-;4720:4;4743:3;4735:11;;4766:3;4763:1;4756:14;4800:4;4797:1;4787:18;4779:26;;4671:141;;;:::o;4818:93::-;4855:6;4902:2;4897;4890:5;4886:14;4882:23;4872:33;;4818:93;;;:::o;4917:107::-;4961:8;5011:5;5005:4;5001:16;4980:37;;4917:107;;;;:::o;5030:393::-;5099:6;5149:1;5137:10;5133:18;5172:97;5202:66;5191:9;5172:97;:::i;:::-;5290:39;5320:8;5309:9;5290:39;:::i;:::-;5278:51;;5362:4;5358:9;5351:5;5347:21;5338:30;;5411:4;5401:8;5397:19;5390:5;5387:30;5377:40;;5106:317;;5030:393;;;;;:::o;5429:60::-;5457:3;5478:5;5471:12;;5429:60;;;:::o;5495:142::-;5545:9;5578:53;5596:34;5605:24;5623:5;5605:24;:::i;:::-;5596:34;:::i;:::-;5578:53;:::i;:::-;5565:66;;5495:142;;;:::o;5643:75::-;5686:3;5707:5;5700:12;;5643:75;;;:::o;5724:269::-;5834:39;5865:7;5834:39;:::i;:::-;5895:91;5944:41;5968:16;5944:41;:::i;:::-;5936:6;5929:4;5923:11;5895:91;:::i;:::-;5889:4;5882:105;5800:193;5724:269;;;:::o;5999:73::-;6044:3;5999:73;:::o;6078:189::-;6155:32;;:::i;:::-;6196:65;6254:6;6246;6240:4;6196:65;:::i;:::-;6131:136;6078:189;;:::o;6273:186::-;6333:120;6350:3;6343:5;6340:14;6333:120;;;6404:39;6441:1;6434:5;6404:39;:::i;:::-;6377:1;6370:5;6366:13;6357:22;;6333:120;;;6273:186;;:::o;6465:543::-;6566:2;6561:3;6558:11;6555:446;;;6600:38;6632:5;6600:38;:::i;:::-;6684:29;6702:10;6684:29;:::i;:::-;6674:8;6670:44;6867:2;6855:10;6852:18;6849:49;;;6888:8;6873:23;;6849:49;6911:80;6967:22;6985:3;6967:22;:::i;:::-;6957:8;6953:37;6940:11;6911:80;:::i;:::-;6570:431;;6555:446;6465:543;;;:::o;7014:117::-;7068:8;7118:5;7112:4;7108:16;7087:37;;7014:117;;;;:::o;7137:169::-;7181:6;7214:51;7262:1;7258:6;7250:5;7247:1;7243:13;7214:51;:::i;:::-;7210:56;7295:4;7289;7285:15;7275:25;;7188:118;7137:169;;;;:::o;7311:295::-;7387:4;7533:29;7558:3;7552:4;7533:29;:::i;:::-;7525:37;;7595:3;7592:1;7588:11;7582:4;7579:21;7571:29;;7311:295;;;;:::o;7611:1395::-;7728:37;7761:3;7728:37;:::i;:::-;7830:18;7822:6;7819:30;7816:56;;;7852:18;;:::i;:::-;7816:56;7896:38;7928:4;7922:11;7896:38;:::i;:::-;7981:67;8041:6;8033;8027:4;7981:67;:::i;:::-;8075:1;8099:4;8086:17;;8131:2;8123:6;8120:14;8148:1;8143:618;;;;8805:1;8822:6;8819:77;;;8871:9;8866:3;8862:19;8856:26;8847:35;;8819:77;8922:67;8982:6;8975:5;8922:67;:::i;:::-;8916:4;8909:81;8778:222;8113:887;;8143:618;8195:4;8191:9;8183:6;8179:22;8229:37;8261:4;8229:37;:::i;:::-;8288:1;8302:208;8316:7;8313:1;8310:14;8302:208;;;8395:9;8390:3;8386:19;8380:26;8372:6;8365:42;8446:1;8438:6;8434:14;8424:24;;8493:2;8482:9;8478:18;8465:31;;8339:4;8336:1;8332:12;8327:17;;8302:208;;;8538:6;8529:7;8526:19;8523:179;;;8596:9;8591:3;8587:19;8581:26;8639:48;8681:4;8673:6;8669:17;8658:9;8639:48;:::i;:::-;8631:6;8624:64;8546:156;8523:179;8748:1;8744;8736:6;8732:14;8728:22;8722:4;8715:36;8150:611;;;8113:887;;7703:1303;;;7611:1395;;:::o;9012:126::-;9049:7;9089:42;9082:5;9078:54;9067:65;;9012:126;;;:::o;9144:96::-;9181:7;9210:24;9228:5;9210:24;:::i;:::-;9199:35;;9144:96;;;:::o;9246:118::-;9333:24;9351:5;9333:24;:::i;:::-;9328:3;9321:37;9246:118;;:::o;9370:222::-;9463:4;9501:2;9490:9;9486:18;9478:26;;9514:71;9582:1;9571:9;9567:17;9558:6;9514:71;:::i;:::-;9370:222;;;;:::o;9598:169::-;9682:11;9716:6;9711:3;9704:19;9756:4;9751:3;9747:14;9732:29;;9598:169;;;;:::o;9773:172::-;9913:24;9909:1;9901:6;9897:14;9890:48;9773:172;:::o;9951:366::-;10093:3;10114:67;10178:2;10173:3;10114:67;:::i;:::-;10107:74;;10190:93;10279:3;10190:93;:::i;:::-;10308:2;10303:3;10299:12;10292:19;;9951:366;;;:::o;10323:419::-;10489:4;10527:2;10516:9;10512:18;10504:26;;10576:9;10570:4;10566:20;10562:1;10551:9;10547:17;10540:47;10604:131;10730:4;10604:131;:::i;:::-;10596:139;;10323:419;;;:::o;10748:166::-;10888:18;10884:1;10876:6;10872:14;10865:42;10748:166;:::o;10920:366::-;11062:3;11083:67;11147:2;11142:3;11083:67;:::i;:::-;11076:74;;11159:93;11248:3;11159:93;:::i;:::-;11277:2;11272:3;11268:12;11261:19;;10920:366;;;:::o;11292:419::-;11458:4;11496:2;11485:9;11481:18;11473:26;;11545:9;11539:4;11535:20;11531:1;11520:9;11516:17;11509:47;11573:131;11699:4;11573:131;:::i;:::-;11565:139;;11292:419;;;:::o;11717:180::-;11765:77;11762:1;11755:88;11862:4;11859:1;11852:15;11886:4;11883:1;11876:15;11903:191;11943:3;11962:20;11980:1;11962:20;:::i;:::-;11957:25;;11996:20;12014:1;11996:20;:::i;:::-;11991:25;;12039:1;12036;12032:9;12025:16;;12060:3;12057:1;12054:10;12051:36;;;12067:18;;:::i;:::-;12051:36;11903:191;;;;:::o;12100:118::-;12187:24;12205:5;12187:24;:::i;:::-;12182:3;12175:37;12100:118;;:::o;12224:442::-;12373:4;12411:2;12400:9;12396:18;12388:26;;12424:71;12492:1;12481:9;12477:17;12468:6;12424:71;:::i;:::-;12505:72;12573:2;12562:9;12558:18;12549:6;12505:72;:::i;:::-;12587;12655:2;12644:9;12640:18;12631:6;12587:72;:::i;:::-;12224:442;;;;;;:::o;12672:222::-;12765:4;12803:2;12792:9;12788:18;12780:26;;12816:71;12884:1;12873:9;12869:17;12860:6;12816:71;:::i;:::-;12672:222;;;;:::o;232:2169:6:-;;;;;;;","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa26469706673582212202d41cdab85fc4fb4f0f3e1277d1610a03fd947042d57b800fcd04c1cfc56ca1764736f6c634300081c0033","offset":9474}},"transformations":[{"type":"insert","offset":9527,"reason":"constructorArguments"}],"transformationValues":{"constructorArguments":"0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000001431e0fae6d7217caa00000000000000000000000000000000000000000000000000000000000000000000003414b4500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003414b450000000000000000000000000000000000000000000000000000000000"}},"runtimeBytecode":{"onchainBytecode":"0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063b217ee9711610071578063b217ee97146102ac578063bce62270146102dc578063dd62ed3e146102f8578063f2fde38b14610328578063ffc339c6146103445761010b565b80638da5cb5b1461022257806395d89b41146102405780639a1565971461025e578063a9059cbb1461027c5761010b565b80632a5868ff116100de5780632a5868ff146101ac578063313ce567146101ca57806370a08231146101e8578063715018a6146102185761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610360565b60405161012591906111c0565b60405180910390f35b6101486004803603810190610143919061127b565b6103f2565b60405161015591906112d6565b60405180910390f35b610166610415565b6040516101739190611300565b60405180910390f35b6101966004803603810190610191919061131b565b61041f565b6040516101a391906112d6565b60405180910390f35b6101b461044e565b6040516101c1919061137d565b60405180910390f35b6101d2610474565b6040516101df91906113b4565b60405180910390f35b61020260048036038101906101fd91906113cf565b61047d565b60405161020f9190611300565b60405180910390f35b6102206104c5565b005b61022a6104d9565b604051610237919061137d565b60405180910390f35b610248610503565b60405161025591906111c0565b60405180910390f35b610266610595565b6040516102739190611300565b60405180910390f35b6102966004803603810190610291919061127b565b61059b565b6040516102a391906112d6565b60405180910390f35b6102c660048036038101906102c191906113cf565b6105be565b6040516102d391906112d6565b60405180910390f35b6102f660048036038101906102f191906113fc565b610618565b005b610312600480360381019061030d9190611429565b610742565b60405161031f9190611300565b60405180910390f35b610342600480360381019061033d91906113cf565b6107c9565b005b61035e600480360381019061035991906113cf565b61084f565b005b60606003805461036f90611498565b80601f016020809104026020016040519081016040528092919081815260200182805461039b90611498565b80156103e85780601f106103bd576101008083540402835291602001916103e8565b820191906000526020600020905b8154815290600101906020018083116103cb57829003601f168201915b5050505050905090565b6000806103fd6108fc565b905061040a818585610904565b600191505092915050565b6000600254905090565b60008061042a6108fc565b9050610437858285610916565b6104428585856109ab565b60019150509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104cd610a9f565b6104d76000610b26565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461051290611498565b80601f016020809104026020016040519081016040528092919081815260200182805461053e90611498565b801561058b5780601f106105605761010080835404028352916020019161058b565b820191906000526020600020905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b60075481565b6000806105a66108fc565b90506105b38185856109ab565b600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f9061153b565b60405180910390fd5b60028111156106ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e3906115a7565b60405180910390fd5b60006007541461073f5760006007549050816007819055507f229aa33713d83257590af14156bb876c7928c6060a46edd8d19b7460ff431d6681836040516107359291906115c7565b60405180910390a1505b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6107d1610a9f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108435760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161083a919061137d565b60405180910390fd5b61084c81610b26565b50565b610857610a9f565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f18a20cd8522a3b9ece246a60b00675f1924437ea8112ca07f7c4bfb4294296b981836040516108f09291906115f0565b60405180910390a15050565b600033905090565b6109118383836001610bec565b505050565b60006109228484610742565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156109a55781811015610995578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161098c93929190611619565b60405180910390fd5b6109a484848484036000610bec565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a1d5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a14919061137d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8f5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a86919061137d565b60405180910390fd5b610a9a838383610dc3565b505050565b610aa76108fc565b73ffffffffffffffffffffffffffffffffffffffff16610ac56104d9565b73ffffffffffffffffffffffffffffffffffffffff1614610b2457610ae86108fc565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b1b919061137d565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610c5e5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610c55919061137d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cd05760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610cc7919061137d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610dbd578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610db49190611300565b60405180910390a35b50505050565b600160075403610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff9061169c565b60405180910390fd5b600260075403610efb57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ebb5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190611708565b60405180910390fd5b5b610f06838383610f0b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5d578060026000828254610f519190611757565b92505081905550611030565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fe9578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610fe093929190611619565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107957806002600082825403925050819055506110c6565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111239190611300565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561116a57808201518184015260208101905061114f565b60008484015250505050565b6000601f19601f8301169050919050565b600061119282611130565b61119c818561113b565b93506111ac81856020860161114c565b6111b581611176565b840191505092915050565b600060208201905081810360008301526111da8184611187565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611212826111e7565b9050919050565b61122281611207565b811461122d57600080fd5b50565b60008135905061123f81611219565b92915050565b6000819050919050565b61125881611245565b811461126357600080fd5b50565b6000813590506112758161124f565b92915050565b60008060408385031215611292576112916111e2565b5b60006112a085828601611230565b92505060206112b185828601611266565b9150509250929050565b60008115159050919050565b6112d0816112bb565b82525050565b60006020820190506112eb60008301846112c7565b92915050565b6112fa81611245565b82525050565b600060208201905061131560008301846112f1565b92915050565b600080600060608486031215611334576113336111e2565b5b600061134286828701611230565b935050602061135386828701611230565b925050604061136486828701611266565b9150509250925092565b61137781611207565b82525050565b6000602082019050611392600083018461136e565b92915050565b600060ff82169050919050565b6113ae81611398565b82525050565b60006020820190506113c960008301846113a5565b92915050565b6000602082840312156113e5576113e46111e2565b5b60006113f384828501611230565b91505092915050565b600060208284031215611412576114116111e2565b5b600061142084828501611266565b91505092915050565b600080604083850312156114405761143f6111e2565b5b600061144e85828601611230565b925050602061145f85828601611230565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114b057607f821691505b6020821081036114c3576114c2611469565b5b50919050565b7f43616c6c6572206973206e6f7420746865207472616e7366657220636f6e747260008201527f6f6c6c6572000000000000000000000000000000000000000000000000000000602082015250565b600061152560258361113b565b9150611530826114c9565b604082019050919050565b6000602082019050818103600083015261155481611518565b9050919050565b7f496e76616c6964206d6f64650000000000000000000000000000000000000000600082015250565b6000611591600c8361113b565b915061159c8261155b565b602082019050919050565b600060208201905081810360008301526115c081611584565b9050919050565b60006040820190506115dc60008301856112f1565b6115e960208301846112f1565b9392505050565b6000604082019050611605600083018561136e565b611612602083018461136e565b9392505050565b600060608201905061162e600083018661136e565b61163b60208301856112f1565b61164860408301846112f1565b949350505050565b7f5472616e73666572206973207265737472696374656400000000000000000000600082015250565b600061168660168361113b565b915061169182611650565b602082019050919050565b600060208201905081810360008301526116b581611679565b9050919050565b7f496e76616c6964207472616e7366657200000000000000000000000000000000600082015250565b60006116f260108361113b565b91506116fd826116bc565b602082019050919050565b60006020820190508181036000830152611721816116e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061176282611245565b915061176d83611245565b925082820190508082111561178557611784611728565b5b9291505056fea26469706673582212202d41cdab85fc4fb4f0f3e1277d1610a03fd947042d57b800fcd04c1cfc56ca1764736f6c634300081c0033","recompiledBytecode":"0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063b217ee9711610071578063b217ee97146102ac578063bce62270146102dc578063dd62ed3e146102f8578063f2fde38b14610328578063ffc339c6146103445761010b565b80638da5cb5b1461022257806395d89b41146102405780639a1565971461025e578063a9059cbb1461027c5761010b565b80632a5868ff116100de5780632a5868ff146101ac578063313ce567146101ca57806370a08231146101e8578063715018a6146102185761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610360565b60405161012591906111c0565b60405180910390f35b6101486004803603810190610143919061127b565b6103f2565b60405161015591906112d6565b60405180910390f35b610166610415565b6040516101739190611300565b60405180910390f35b6101966004803603810190610191919061131b565b61041f565b6040516101a391906112d6565b60405180910390f35b6101b461044e565b6040516101c1919061137d565b60405180910390f35b6101d2610474565b6040516101df91906113b4565b60405180910390f35b61020260048036038101906101fd91906113cf565b61047d565b60405161020f9190611300565b60405180910390f35b6102206104c5565b005b61022a6104d9565b604051610237919061137d565b60405180910390f35b610248610503565b60405161025591906111c0565b60405180910390f35b610266610595565b6040516102739190611300565b60405180910390f35b6102966004803603810190610291919061127b565b61059b565b6040516102a391906112d6565b60405180910390f35b6102c660048036038101906102c191906113cf565b6105be565b6040516102d391906112d6565b60405180910390f35b6102f660048036038101906102f191906113fc565b610618565b005b610312600480360381019061030d9190611429565b610742565b60405161031f9190611300565b60405180910390f35b610342600480360381019061033d91906113cf565b6107c9565b005b61035e600480360381019061035991906113cf565b61084f565b005b60606003805461036f90611498565b80601f016020809104026020016040519081016040528092919081815260200182805461039b90611498565b80156103e85780601f106103bd576101008083540402835291602001916103e8565b820191906000526020600020905b8154815290600101906020018083116103cb57829003601f168201915b5050505050905090565b6000806103fd6108fc565b905061040a818585610904565b600191505092915050565b6000600254905090565b60008061042a6108fc565b9050610437858285610916565b6104428585856109ab565b60019150509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104cd610a9f565b6104d76000610b26565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461051290611498565b80601f016020809104026020016040519081016040528092919081815260200182805461053e90611498565b801561058b5780601f106105605761010080835404028352916020019161058b565b820191906000526020600020905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b60075481565b6000806105a66108fc565b90506105b38185856109ab565b600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f9061153b565b60405180910390fd5b60028111156106ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e3906115a7565b60405180910390fd5b60006007541461073f5760006007549050816007819055507f229aa33713d83257590af14156bb876c7928c6060a46edd8d19b7460ff431d6681836040516107359291906115c7565b60405180910390a1505b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6107d1610a9f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108435760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161083a919061137d565b60405180910390fd5b61084c81610b26565b50565b610857610a9f565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f18a20cd8522a3b9ece246a60b00675f1924437ea8112ca07f7c4bfb4294296b981836040516108f09291906115f0565b60405180910390a15050565b600033905090565b6109118383836001610bec565b505050565b60006109228484610742565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156109a55781811015610995578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161098c93929190611619565b60405180910390fd5b6109a484848484036000610bec565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a1d5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a14919061137d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8f5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a86919061137d565b60405180910390fd5b610a9a838383610dc3565b505050565b610aa76108fc565b73ffffffffffffffffffffffffffffffffffffffff16610ac56104d9565b73ffffffffffffffffffffffffffffffffffffffff1614610b2457610ae86108fc565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b1b919061137d565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610c5e5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610c55919061137d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cd05760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610cc7919061137d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610dbd578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610db49190611300565b60405180910390a35b50505050565b600160075403610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff9061169c565b60405180910390fd5b600260075403610efb57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ebb5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190611708565b60405180910390fd5b5b610f06838383610f0b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5d578060026000828254610f519190611757565b92505081905550611030565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fe9578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610fe093929190611619565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107957806002600082825403925050819055506110c6565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111239190611300565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561116a57808201518184015260208101905061114f565b60008484015250505050565b6000601f19601f8301169050919050565b600061119282611130565b61119c818561113b565b93506111ac81856020860161114c565b6111b581611176565b840191505092915050565b600060208201905081810360008301526111da8184611187565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611212826111e7565b9050919050565b61122281611207565b811461122d57600080fd5b50565b60008135905061123f81611219565b92915050565b6000819050919050565b61125881611245565b811461126357600080fd5b50565b6000813590506112758161124f565b92915050565b60008060408385031215611292576112916111e2565b5b60006112a085828601611230565b92505060206112b185828601611266565b9150509250929050565b60008115159050919050565b6112d0816112bb565b82525050565b60006020820190506112eb60008301846112c7565b92915050565b6112fa81611245565b82525050565b600060208201905061131560008301846112f1565b92915050565b600080600060608486031215611334576113336111e2565b5b600061134286828701611230565b935050602061135386828701611230565b925050604061136486828701611266565b9150509250925092565b61137781611207565b82525050565b6000602082019050611392600083018461136e565b92915050565b600060ff82169050919050565b6113ae81611398565b82525050565b60006020820190506113c960008301846113a5565b92915050565b6000602082840312156113e5576113e46111e2565b5b60006113f384828501611230565b91505092915050565b600060208284031215611412576114116111e2565b5b600061142084828501611266565b91505092915050565b600080604083850312156114405761143f6111e2565b5b600061144e85828601611230565b925050602061145f85828601611230565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114b057607f821691505b6020821081036114c3576114c2611469565b5b50919050565b7f43616c6c6572206973206e6f7420746865207472616e7366657220636f6e747260008201527f6f6c6c6572000000000000000000000000000000000000000000000000000000602082015250565b600061152560258361113b565b9150611530826114c9565b604082019050919050565b6000602082019050818103600083015261155481611518565b9050919050565b7f496e76616c6964206d6f64650000000000000000000000000000000000000000600082015250565b6000611591600c8361113b565b915061159c8261155b565b602082019050919050565b600060208201905081810360008301526115c081611584565b9050919050565b60006040820190506115dc60008301856112f1565b6115e960208301846112f1565b9392505050565b6000604082019050611605600083018561136e565b611612602083018461136e565b9392505050565b600060608201905061162e600083018661136e565b61163b60208301856112f1565b61164860408301846112f1565b949350505050565b7f5472616e73666572206973207265737472696374656400000000000000000000600082015250565b600061168660168361113b565b915061169182611650565b602082019050919050565b600060208201905081810360008301526116b581611679565b9050919050565b7f496e76616c6964207472616e7366657200000000000000000000000000000000600082015250565b60006116f260108361113b565b91506116fd826116bc565b602082019050919050565b60006020820190508181036000830152611721816116e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061176282611245565b915061176d83611245565b925082820190508082111561178557611784611728565b5b9291505056fea26469706673582212202d41cdab85fc4fb4f0f3e1277d1610a03fd947042d57b800fcd04c1cfc56ca1764736f6c634300081c0033","sourceMap":"232:2169:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3979:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2830:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4757:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;360:34:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2688:82:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2985:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2293:101:0;;;:::i;:::-;;1638:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1962:93:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;658:28:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3296:178:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1590:132:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1730:434;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3532:140:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2543:215:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2172:226:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1760:89:2;1805:13;1837:5;1830:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89;:::o;3979:186::-;4052:4;4068:13;4084:12;:10;:12::i;:::-;4068:28;;4106:31;4115:5;4122:7;4131:5;4106:8;:31::i;:::-;4154:4;4147:11;;;3979:186;;;;:::o;2830:97::-;2882:7;2908:12;;2901:19;;2830:97;:::o;4757:244::-;4844:4;4860:15;4878:12;:10;:12::i;:::-;4860:30;;4900:37;4916:4;4922:7;4931:5;4900:15;:37::i;:::-;4947:26;4957:4;4963:2;4967:5;4947:9;:26::i;:::-;4990:4;4983:11;;;4757:244;;;;;:::o;360:34:6:-;;;;;;;;;;;;;:::o;2688:82:2:-;2737:5;2761:2;2754:9;;2688:82;:::o;2985:116::-;3050:7;3076:9;:18;3086:7;3076:18;;;;;;;;;;;;;;;;3069:25;;2985:116;;;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1638:85::-;1684:7;1710:6;;;;;;;;;;;1703:13;;1638:85;:::o;1962:93:2:-;2009:13;2041:7;2034:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1962:93;:::o;658:28:6:-;;;;:::o;3296:178:2:-;3365:4;3381:13;3397:12;:10;:12::i;:::-;3381:28;;3419:27;3429:5;3436:2;3440:5;3419:9;:27::i;:::-;3463:4;3456:11;;;3296:178;;;;:::o;1590:132:6:-;1660:4;1695:19;;;;;;;;;;;1684:30;;:7;:30;;;1677:37;;1590:132;;;:::o;1730:434::-;1815:19;;;;;;;;;;;1801:33;;:10;:33;;;1793:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;256:1:8;1895:8:6;:34;;1887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;122:1:8;1963:13:6;;:36;1959:198;;2016:16;2035:13;;2016:32;;2079:8;2063:13;:24;;;;2107:38;2126:8;2136;2107:38;;;;;;;:::i;:::-;;;;;;;;2001:156;1959:198;1730:434;:::o;3532:140:2:-;3612:7;3638:11;:18;3650:5;3638:18;;;;;;;;;;;;;;;:27;3657:7;3638:27;;;;;;;;;;;;;;;;3631:34;;3532:140;;;;:::o;2543:215:0:-;1531:13;:11;:13::i;:::-;2647:1:::1;2627:22;;:8;:22;;::::0;2623:91:::1;;2700:1;2672:31;;;;;;;;;;;:::i;:::-;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;2172:226:6:-;1531:13:0;:11;:13::i;:::-;2251:16:6::1;2270:19;;;;;;;;;;;2251:38;;2322:8;2300:19;;:30;;;;;;;;;;;;;;;;;;2346:44;2371:8;2381;2346:44;;;;;;;:::i;:::-;;;;;;;;2240:158;2172:226:::0;:::o;656:96:5:-;709:7;735:10;728:17;;656:96;:::o;8707:128:2:-;8791:37;8800:5;8807:7;8816:5;8823:4;8791:8;:37::i;:::-;8707:128;;;:::o;10396:476::-;10495:24;10522:25;10532:5;10539:7;10522:9;:25::i;:::-;10495:52;;10580:17;10561:16;:36;10557:309;;;10636:5;10617:16;:24;10613:130;;;10695:7;10704:16;10722:5;10668:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10613:130;10784:57;10793:5;10800:7;10828:5;10809:16;:24;10835:5;10784:8;:57::i;:::-;10557:309;10485:387;10396:476;;;:::o;5374:300::-;5473:1;5457:18;;:4;:18;;;5453:86;;5525:1;5498:30;;;;;;;;;;;:::i;:::-;;;;;;;;5453:86;5566:1;5552:16;;:2;:16;;;5548:86;;5620:1;5591:32;;;;;;;;;;;:::i;:::-;;;;;;;;5548:86;5643:24;5651:4;5657:2;5661:5;5643:7;:24::i;:::-;5374:300;;;:::o;1796:162:0:-;1866:12;:10;:12::i;:::-;1855:23;;:7;:5;:7::i;:::-;:23;;;1851:101;;1928:12;:10;:12::i;:::-;1901:40;;;;;;;;;;;:::i;:::-;;;;;;;;1851:101;1796:162::o;2912:187::-;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;9682:432:2:-;9811:1;9794:19;;:5;:19;;;9790:89;;9865:1;9836:32;;;;;;;;;;;:::i;:::-;;;;;;;;9790:89;9911:1;9892:21;;:7;:21;;;9888:90;;9964:1;9936:31;;;;;;;;;;;:::i;:::-;;;;;;;;9888:90;10017:5;9987:11;:18;9999:5;9987:18;;;;;;;;;;;;;;;:27;10006:7;9987:27;;;;;;;;;;;;;;;:35;;;;10036:9;10032:76;;;10082:7;10066:31;;10075:5;10066:31;;;10091:5;10066:31;;;;;;:::i;:::-;;;;;;;;10032:76;9682:432;;;;:::o;1130:452:6:-;167:1:8;1264:13:6;;:40;1260:105;;1321:32;;;;;;;;;;:::i;:::-;;;;;;;;1260:105;212:1:8;1379:13:6;;:40;1375:158;;1452:19;;;;;;;;;;;1444:27;;:4;:27;;;:56;;;;1481:19;;;;;;;;;;;1475:25;;:2;:25;;;1444:56;1436:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;1375:158;1543:31;1557:4;1563:2;1567:6;1543:13;:31::i;:::-;1130:452;;;:::o;5989:1107:2:-;6094:1;6078:18;;:4;:18;;;6074:540;;6230:5;6214:12;;:21;;;;;;;:::i;:::-;;;;;;;;6074:540;;;6266:19;6288:9;:15;6298:4;6288:15;;;;;;;;;;;;;;;;6266:37;;6335:5;6321:11;:19;6317:115;;;6392:4;6398:11;6411:5;6367:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6317:115;6584:5;6570:11;:19;6552:9;:15;6562:4;6552:15;;;;;;;;;;;;;;;:37;;;;6252:362;6074:540;6642:1;6628:16;;:2;:16;;;6624:425;;6807:5;6791:12;;:21;;;;;;;;;;;6624:425;;;7019:5;7002:9;:13;7012:2;7002:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6624:425;7079:2;7064:25;;7073:4;7064:25;;;7083:5;7064:25;;;;;;:::i;:::-;;;;;;;;5989:1107;;;:::o;7:99:9:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:248::-;369:1;379:113;393:6;390:1;387:13;379:113;;;478:1;473:3;469:11;463:18;459:1;454:3;450:11;443:39;415:2;412:1;408:10;403:15;;379:113;;;526:1;517:6;512:3;508:16;501:27;349:186;287:248;;;:::o;541:102::-;582:6;633:2;629:7;624:2;617:5;613:14;609:28;599:38;;541:102;;;:::o;649:377::-;737:3;765:39;798:5;765:39;:::i;:::-;820:71;884:6;879:3;820:71;:::i;:::-;813:78;;900:65;958:6;953:3;946:4;939:5;935:16;900:65;:::i;:::-;990:29;1012:6;990:29;:::i;:::-;985:3;981:39;974:46;;741:285;649:377;;;;:::o;1032:313::-;1145:4;1183:2;1172:9;1168:18;1160:26;;1232:9;1226:4;1222:20;1218:1;1207:9;1203:17;1196:47;1260:78;1333:4;1324:6;1260:78;:::i;:::-;1252:86;;1032:313;;;;:::o;1432:117::-;1541:1;1538;1531:12;1678:126;1715:7;1755:42;1748:5;1744:54;1733:65;;1678:126;;;:::o;1810:96::-;1847:7;1876:24;1894:5;1876:24;:::i;:::-;1865:35;;1810:96;;;:::o;1912:122::-;1985:24;2003:5;1985:24;:::i;:::-;1978:5;1975:35;1965:63;;2024:1;2021;2014:12;1965:63;1912:122;:::o;2040:139::-;2086:5;2124:6;2111:20;2102:29;;2140:33;2167:5;2140:33;:::i;:::-;2040:139;;;;:::o;2185:77::-;2222:7;2251:5;2240:16;;2185:77;;;:::o;2268:122::-;2341:24;2359:5;2341:24;:::i;:::-;2334:5;2331:35;2321:63;;2380:1;2377;2370:12;2321:63;2268:122;:::o;2396:139::-;2442:5;2480:6;2467:20;2458:29;;2496:33;2523:5;2496:33;:::i;:::-;2396:139;;;;:::o;2541:474::-;2609:6;2617;2666:2;2654:9;2645:7;2641:23;2637:32;2634:119;;;2672:79;;:::i;:::-;2634:119;2792:1;2817:53;2862:7;2853:6;2842:9;2838:22;2817:53;:::i;:::-;2807:63;;2763:117;2919:2;2945:53;2990:7;2981:6;2970:9;2966:22;2945:53;:::i;:::-;2935:63;;2890:118;2541:474;;;;;:::o;3021:90::-;3055:7;3098:5;3091:13;3084:21;3073:32;;3021:90;;;:::o;3117:109::-;3198:21;3213:5;3198:21;:::i;:::-;3193:3;3186:34;3117:109;;:::o;3232:210::-;3319:4;3357:2;3346:9;3342:18;3334:26;;3370:65;3432:1;3421:9;3417:17;3408:6;3370:65;:::i;:::-;3232:210;;;;:::o;3448:118::-;3535:24;3553:5;3535:24;:::i;:::-;3530:3;3523:37;3448:118;;:::o;3572:222::-;3665:4;3703:2;3692:9;3688:18;3680:26;;3716:71;3784:1;3773:9;3769:17;3760:6;3716:71;:::i;:::-;3572:222;;;;:::o;3800:619::-;3877:6;3885;3893;3942:2;3930:9;3921:7;3917:23;3913:32;3910:119;;;3948:79;;:::i;:::-;3910:119;4068:1;4093:53;4138:7;4129:6;4118:9;4114:22;4093:53;:::i;:::-;4083:63;;4039:117;4195:2;4221:53;4266:7;4257:6;4246:9;4242:22;4221:53;:::i;:::-;4211:63;;4166:118;4323:2;4349:53;4394:7;4385:6;4374:9;4370:22;4349:53;:::i;:::-;4339:63;;4294:118;3800:619;;;;;:::o;4425:118::-;4512:24;4530:5;4512:24;:::i;:::-;4507:3;4500:37;4425:118;;:::o;4549:222::-;4642:4;4680:2;4669:9;4665:18;4657:26;;4693:71;4761:1;4750:9;4746:17;4737:6;4693:71;:::i;:::-;4549:222;;;;:::o;4777:86::-;4812:7;4852:4;4845:5;4841:16;4830:27;;4777:86;;;:::o;4869:112::-;4952:22;4968:5;4952:22;:::i;:::-;4947:3;4940:35;4869:112;;:::o;4987:214::-;5076:4;5114:2;5103:9;5099:18;5091:26;;5127:67;5191:1;5180:9;5176:17;5167:6;5127:67;:::i;:::-;4987:214;;;;:::o;5207:329::-;5266:6;5315:2;5303:9;5294:7;5290:23;5286:32;5283:119;;;5321:79;;:::i;:::-;5283:119;5441:1;5466:53;5511:7;5502:6;5491:9;5487:22;5466:53;:::i;:::-;5456:63;;5412:117;5207:329;;;;:::o;5542:::-;5601:6;5650:2;5638:9;5629:7;5625:23;5621:32;5618:119;;;5656:79;;:::i;:::-;5618:119;5776:1;5801:53;5846:7;5837:6;5826:9;5822:22;5801:53;:::i;:::-;5791:63;;5747:117;5542:329;;;;:::o;5877:474::-;5945:6;5953;6002:2;5990:9;5981:7;5977:23;5973:32;5970:119;;;6008:79;;:::i;:::-;5970:119;6128:1;6153:53;6198:7;6189:6;6178:9;6174:22;6153:53;:::i;:::-;6143:63;;6099:117;6255:2;6281:53;6326:7;6317:6;6306:9;6302:22;6281:53;:::i;:::-;6271:63;;6226:118;5877:474;;;;;:::o;6357:180::-;6405:77;6402:1;6395:88;6502:4;6499:1;6492:15;6526:4;6523:1;6516:15;6543:320;6587:6;6624:1;6618:4;6614:12;6604:22;;6671:1;6665:4;6661:12;6692:18;6682:81;;6748:4;6740:6;6736:17;6726:27;;6682:81;6810:2;6802:6;6799:14;6779:18;6776:38;6773:84;;6829:18;;:::i;:::-;6773:84;6594:269;6543:320;;;:::o;6869:224::-;7009:34;7005:1;6997:6;6993:14;6986:58;7078:7;7073:2;7065:6;7061:15;7054:32;6869:224;:::o;7099:366::-;7241:3;7262:67;7326:2;7321:3;7262:67;:::i;:::-;7255:74;;7338:93;7427:3;7338:93;:::i;:::-;7456:2;7451:3;7447:12;7440:19;;7099:366;;;:::o;7471:419::-;7637:4;7675:2;7664:9;7660:18;7652:26;;7724:9;7718:4;7714:20;7710:1;7699:9;7695:17;7688:47;7752:131;7878:4;7752:131;:::i;:::-;7744:139;;7471:419;;;:::o;7896:162::-;8036:14;8032:1;8024:6;8020:14;8013:38;7896:162;:::o;8064:366::-;8206:3;8227:67;8291:2;8286:3;8227:67;:::i;:::-;8220:74;;8303:93;8392:3;8303:93;:::i;:::-;8421:2;8416:3;8412:12;8405:19;;8064:366;;;:::o;8436:419::-;8602:4;8640:2;8629:9;8625:18;8617:26;;8689:9;8683:4;8679:20;8675:1;8664:9;8660:17;8653:47;8717:131;8843:4;8717:131;:::i;:::-;8709:139;;8436:419;;;:::o;8861:332::-;8982:4;9020:2;9009:9;9005:18;8997:26;;9033:71;9101:1;9090:9;9086:17;9077:6;9033:71;:::i;:::-;9114:72;9182:2;9171:9;9167:18;9158:6;9114:72;:::i;:::-;8861:332;;;;;:::o;9199:::-;9320:4;9358:2;9347:9;9343:18;9335:26;;9371:71;9439:1;9428:9;9424:17;9415:6;9371:71;:::i;:::-;9452:72;9520:2;9509:9;9505:18;9496:6;9452:72;:::i;:::-;9199:332;;;;;:::o;9537:442::-;9686:4;9724:2;9713:9;9709:18;9701:26;;9737:71;9805:1;9794:9;9790:17;9781:6;9737:71;:::i;:::-;9818:72;9886:2;9875:9;9871:18;9862:6;9818:72;:::i;:::-;9900;9968:2;9957:9;9953:18;9944:6;9900:72;:::i;:::-;9537:442;;;;;;:::o;9985:172::-;10125:24;10121:1;10113:6;10109:14;10102:48;9985:172;:::o;10163:366::-;10305:3;10326:67;10390:2;10385:3;10326:67;:::i;:::-;10319:74;;10402:93;10491:3;10402:93;:::i;:::-;10520:2;10515:3;10511:12;10504:19;;10163:366;;;:::o;10535:419::-;10701:4;10739:2;10728:9;10724:18;10716:26;;10788:9;10782:4;10778:20;10774:1;10763:9;10759:17;10752:47;10816:131;10942:4;10816:131;:::i;:::-;10808:139;;10535:419;;;:::o;10960:166::-;11100:18;11096:1;11088:6;11084:14;11077:42;10960:166;:::o;11132:366::-;11274:3;11295:67;11359:2;11354:3;11295:67;:::i;:::-;11288:74;;11371:93;11460:3;11371:93;:::i;:::-;11489:2;11484:3;11480:12;11473:19;;11132:366;;;:::o;11504:419::-;11670:4;11708:2;11697:9;11693:18;11685:26;;11757:9;11751:4;11747:20;11743:1;11732:9;11728:17;11721:47;11785:131;11911:4;11785:131;:::i;:::-;11777:139;;11504:419;;;:::o;11929:180::-;11977:77;11974:1;11967:88;12074:4;12071:1;12064:15;12098:4;12095:1;12088:15;12115:191;12155:3;12174:20;12192:1;12174:20;:::i;:::-;12169:25;;12208:20;12226:1;12208:20;:::i;:::-;12203:25;;12251:1;12248;12244:9;12237:16;;12272:3;12269:1;12266:10;12263:36;;;12279:18;;:::i;:::-;12263:36;12115:191;;;;:::o","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa26469706673582212202d41cdab85fc4fb4f0f3e1277d1610a03fd947042d57b800fcd04c1cfc56ca1764736f6c634300081c0033","offset":6028}},"immutableReferences":{},"transformations":[],"transformationValues":{}},"deployment":{"transactionHash":"0x5fd998039100bccfe6073724679bd3f8b6e3f6e41267fe99047054fc5e99a08b","blockNumber":"57840341","transactionIndex":"28","deployer":"0x6468Cce97A300fF9d02D4cad0d3e097CACE2EAC2"},"sources":{"@openzeppelin/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /**\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\n     */\n    error OwnableInvalidOwner(address owner);\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n     */\n    constructor(address initialOwner) {\n        if (initialOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        if (owner() != _msgSender()) {\n            revert OwnableUnauthorizedAccount(_msgSender());\n        }\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        if (newOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC20InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC20InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC20InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n    /**\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n     * Used in balance queries.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721InvalidOwner(address owner);\n\n    /**\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721NonexistentToken(uint256 tokenId);\n\n    /**\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param tokenId Identifier number of a token.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC721InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC721InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC721InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC1155InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC1155InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC1155MissingApprovalForAll(address operator, address owner);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC1155InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC1155InvalidOperator(address operator);\n\n    /**\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n     * Used in batch transfers.\n     * @param idsLength Length of the array of token identifiers\n     * @param valuesLength Length of the array of token amounts\n     */\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC-20\n * applications.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n    mapping(address account => uint256) private _balances;\n\n    mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * Both values are immutable: they can only be set once during construction.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the default value returned by this function, unless\n     * it's overridden.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `value`.\n     */\n    function transfer(address to, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Skips emitting an {Approval} event indicating an allowance update. This is not\n     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `value`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `value`.\n     */\n    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, value);\n        _transfer(from, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _transfer(address from, address to, uint256 value) internal {\n        if (from == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        if (to == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(from, to, value);\n    }\n\n    /**\n     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n     * this function.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _update(address from, address to, uint256 value) internal virtual {\n        if (from == address(0)) {\n            // Overflow check required: The rest of the code assumes that totalSupply never overflows\n            _totalSupply += value;\n        } else {\n            uint256 fromBalance = _balances[from];\n            if (fromBalance < value) {\n                revert ERC20InsufficientBalance(from, fromBalance, value);\n            }\n            unchecked {\n                // Overflow not possible: value <= fromBalance <= totalSupply.\n                _balances[from] = fromBalance - value;\n            }\n        }\n\n        if (to == address(0)) {\n            unchecked {\n                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n                _totalSupply -= value;\n            }\n        } else {\n            unchecked {\n                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n                _balances[to] += value;\n            }\n        }\n\n        emit Transfer(from, to, value);\n    }\n\n    /**\n     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n     * Relies on the `_update` mechanism\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _mint(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(address(0), account, value);\n    }\n\n    /**\n     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n     * Relies on the `_update` mechanism.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead\n     */\n    function _burn(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        _update(account, address(0), value);\n    }\n\n    /**\n     * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     *\n     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n     */\n    function _approve(address owner, address spender, uint256 value) internal {\n        _approve(owner, spender, value, true);\n    }\n\n    /**\n     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n     *\n     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n     * `Approval` event during `transferFrom` operations.\n     *\n     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n     * true using the following override:\n     *\n     * ```solidity\n     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n     *     super._approve(owner, spender, value, true);\n     * }\n     * ```\n     *\n     * Requirements are the same as {_approve}.\n     */\n    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n        if (owner == address(0)) {\n            revert ERC20InvalidApprover(address(0));\n        }\n        if (spender == address(0)) {\n            revert ERC20InvalidSpender(address(0));\n        }\n        _allowances[owner][spender] = value;\n        if (emitEvent) {\n            emit Approval(owner, spender, value);\n        }\n    }\n\n    /**\n     * @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n     *\n     * Does not update the allowance value in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Does not emit an {Approval} event.\n     */\n    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance < type(uint256).max) {\n            if (currentAllowance < value) {\n                revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n            }\n            unchecked {\n                _approve(owner, spender, currentAllowance - value, false);\n            }\n        }\n    }\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"},"contracts/AKEToken.sol":{"content":"// SPDX-License-Identifier: MIT\r\npragma solidity ^0.8.10;\r\n\r\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\r\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\r\nimport \"./IFourERC20.sol\";\r\nimport \"./TransferMode.sol\";\r\n\r\ncontract AKEToken is ERC20, Ownable, IFourERC20 {\r\n    //\r\n    // The controller who can change the transfer mode.\r\n    //\r\n    address public _transferController;\r\n\r\n    //\r\n    // The transfer mode includes\r\n    // RESTRICTED  The transfer is disabled.  (Initial mode)\r\n    // CONTROLLED  The transfer can only performed between transfer controller and token owner.\r\n    // NORMAL      The transfer is enabled.\r\n    //\r\n    uint256 public _transferMode;\r\n\r\n    event ChangeTransferController(address oldValue, address newValue);\r\n    event ChangeTransferMode(uint256 oldValue, uint256 newValue);\r\n\r\n    constructor(\r\n        string memory name,\r\n        string memory symbol,\r\n        uint256 totalSupply\r\n    ) ERC20(name, symbol) Ownable(msg.sender) {\r\n        _mint(owner(), totalSupply);\r\n        _transferMode = TransferMode.CONTROLLED;\r\n        _transferController = owner();\r\n    }\r\n\r\n    function _update(\r\n        address from,\r\n        address to,\r\n        uint256 amount\r\n    ) internal virtual override {\r\n        if (_transferMode == TransferMode.RESTRICTED) {\r\n            revert(\"Transfer is restricted\");\r\n        }\r\n        if (_transferMode == TransferMode.CONTROLLED) {\r\n            require(from == _transferController || to == _transferController, \"Invalid transfer\");\r\n        }\r\n        super._update(from, to, amount);\r\n    }\r\n\r\n    function isTransferController(address account) external view returns (bool) {\r\n        return account == _transferController;\r\n    }\r\n\r\n    function setTransferMode(uint256 newValue) external {\r\n        require(msg.sender == _transferController, \"Caller is not the transfer controller\");\r\n        require(newValue <= TransferMode.MAX_VALUE, \"Invalid mode\");\r\n\r\n        if (_transferMode != TransferMode.NORMAL) {\r\n            uint256 oldValue = _transferMode;\r\n            _transferMode = newValue;\r\n            emit ChangeTransferMode(oldValue, newValue);\r\n        }\r\n    }\r\n\r\n    function setTransferController(address newValue) external onlyOwner {\r\n        address oldValue = _transferController;\r\n        _transferController = newValue;\r\n        emit ChangeTransferController(oldValue, newValue);\r\n    }\r\n}"},"contracts/IFourERC20.sol":{"content":"// SPDX-License-Identifier: MIT\r\npragma solidity ^0.8.0;\r\n\r\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\r\n\r\ninterface IFourERC20 is IERC20 {\r\n    function isTransferController(address account) external returns (bool);\r\n    function setTransferMode(uint256) external;\r\n}"},"contracts/TransferMode.sol":{"content":"// SPDX-License-Identifier: MIT\r\npragma solidity ^0.8.10;\r\n\r\nlibrary TransferMode {\r\n    uint256 public constant NORMAL = 0;\r\n    uint256 public constant RESTRICTED = 1;\r\n    uint256 public constant CONTROLLED = 2;\r\n    uint256 public constant MAX_VALUE = 2;\r\n}"}},"compilation":{"language":"Solidity","compiler":"solc","compilerVersion":"0.8.28+commit.7893614a","compilerSettings":{"optimizer":{"runs":200,"enabled":false},"evmVersion":"paris"},"name":"AKEToken","fullyQualifiedName":"contracts/AKEToken.sol:AKEToken"},"abi":[{"type":"constructor","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"symbol","type":"string","internalType":"string"},{"name":"totalSupply","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"ERC20InsufficientAllowance","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InsufficientBalance","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InvalidApprover","type":"error","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidReceiver","type":"error","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSender","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSpender","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"name":"OwnableInvalidOwner","type":"error","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"name":"OwnableUnauthorizedAccount","type":"error","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"ChangeTransferController","type":"event","inputs":[{"name":"oldValue","type":"address","indexed":false,"internalType":"address"},{"name":"newValue","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"name":"ChangeTransferMode","type":"event","inputs":[{"name":"oldValue","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newValue","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"OwnershipTransferred","type":"event","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"_transferController","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"_transferMode","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"allowance","type":"function","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"decimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"name":"isTransferController","type":"function","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"renounceOwnership","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"setTransferController","type":"function","inputs":[{"name":"newValue","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setTransferMode","type":"function","inputs":[{"name":"newValue","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transfer","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferOwnership","type":"function","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"}],"metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldValue","type":"address"},{"indexed":false,"internalType":"address","name":"newValue","type":"address"}],"name":"ChangeTransferController","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"ChangeTransferMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_transferController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTransferController","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newValue","type":"address"}],"name":"setTransferController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTransferMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"errors":{"ERC20InsufficientAllowance(address,uint256,uint256)":[{"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers.","params":{"allowance":"Amount of tokens a `spender` is allowed to operate with.","needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers.","params":{"balance":"Current balance for the interacting account.","needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred."}}],"ERC20InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC20InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC20InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC20InvalidSpender(address)":[{"details":"Indicates a failure with the `spender` to be approved. Used in approvals.","params":{"spender":"Address that may be allowed to operate on tokens without being their owner."}}],"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}]},"events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"compilationTarget":{"contracts/AKEToken.sol":"AKEToken"},"evmVersion":"paris","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":false,"runs":200},"remappings":[]},"sources":{"@openzeppelin/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","license":"MIT","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"]},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b","license":"MIT","urls":["bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b","dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"]},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"keccak256":"0x41f6b3b9e030561e7896dbef372b499cc8d418a80c3884a4d65a68f2fdc7493a","license":"MIT","urls":["bzz-raw://80b0992a11b2fd1f75ced2971696d07bbd1d19ce6761dd50d8b6d48aa435f42a","dweb:/ipfs/QmZDe5xd2gXHjVEjv9t8C1KQ68K5T8qFwdinwQgmP3rF3x"]},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7","license":"MIT","urls":["bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db","dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"]},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330","license":"MIT","urls":["bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf","dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"]},"@openzeppelin/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","license":"MIT","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"]},"contracts/AKEToken.sol":{"keccak256":"0x8c6888be8581182831aa41e4af85bdefe633182dad7744d92016f7b02d90d125","license":"MIT","urls":["bzz-raw://c4ce16bbe91283a57244d6bfeb4077c017e8a54f799a43556e270925fd2fe4bc","dweb:/ipfs/Qme6yNggB6HE9LVb3yfbiKbUu1NYq8YAhDFnUEeUPkeecc"]},"contracts/IFourERC20.sol":{"keccak256":"0x78647367c623fe5f9652bec822a5f06ff6dbcc06c12dc619f6ab00236e2f209d","license":"MIT","urls":["bzz-raw://6c8338abe43c994821c0d53fd3c4416de84f6bd530e01921ce70ed002be79f73","dweb:/ipfs/QmX6BoEgf5bBDPLFmWWPVZNcPuc3tZtN5CN1M9YhtD8Fua"]},"contracts/TransferMode.sol":{"keccak256":"0xd985af6462053e2b3ba36084aa924980f6e0526670523b717320780eac38e6ac","license":"MIT","urls":["bzz-raw://45f83436d4910f7890cb6c5b18f5dc2abe063ecf84f300ad2fb2c605968209f9","dweb:/ipfs/QmVpmnzPC2XT44pB5ZSv2JUDuA9ZQmkSa37Q5LjEuhbszj"]}},"version":1},"storageLayout":{"types":{"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_string_storage":{"label":"string","encoding":"bytes","numberOfBytes":"32"},"t_mapping(t_address,t_uint256)":{"key":"t_address","label":"mapping(address => uint256)","value":"t_uint256","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"key":"t_address","label":"mapping(address => mapping(address => uint256))","value":"t_mapping(t_address,t_uint256)","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_mapping(t_address,t_uint256)","astId":307,"label":"_balances","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))","astId":313,"label":"_allowances","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"2","type":"t_uint256","astId":315,"label":"_totalSupply","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"3","type":"t_string_storage","astId":317,"label":"_name","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"4","type":"t_string_storage","astId":319,"label":"_symbol","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"5","type":"t_address","astId":8,"label":"_owner","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"6","type":"t_address","astId":947,"label":"_transferController","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"7","type":"t_uint256","astId":949,"label":"_transferMode","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"}]},"transientStorageLayout":null,"userdoc":{"kind":"user","methods":{},"version":1},"devdoc":{"kind":"dev","errors":{"ERC20InvalidSender(address)":[{"params":{"sender":"Address whose tokens are being transferred."},"details":"Indicates a failure with the token `sender`. Used in transfers."}],"ERC20InvalidSpender(address)":[{"params":{"spender":"Address that may be allowed to operate on tokens without being their owner."},"details":"Indicates a failure with the `spender` to be approved. Used in approvals."}],"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"ERC20InvalidApprover(address)":[{"params":{"approver":"Address initiating an approval operation."},"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals."}],"ERC20InvalidReceiver(address)":[{"params":{"receiver":"Address to which tokens are being transferred."},"details":"Indicates a failure with the token `receiver`. Used in transfers."}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"params":{"needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred.","balance":"Current balance for the interacting account."},"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers."}],"ERC20InsufficientAllowance(address,uint256,uint256)":[{"params":{"needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner.","allowance":"Amount of tokens a `spender` is allowed to operate with."},"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers."}]},"events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"methods":{"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"sourceIds":{"contracts/AKEToken.sol":{"id":6},"contracts/IFourERC20.sol":{"id":7},"contracts/TransferMode.sol":{"id":8},"@openzeppelin/contracts/utils/Context.sol":{"id":5},"@openzeppelin/contracts/access/Ownable.sol":{"id":0},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"id":2},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"id":3},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"id":1},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"id":4}},"additionalInput":null,"stdJsonInput":{"sources":{"contracts/AKEToken.sol":{"content":"// SPDX-License-Identifier: MIT\r\npragma solidity ^0.8.10;\r\n\r\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\r\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\r\nimport \"./IFourERC20.sol\";\r\nimport \"./TransferMode.sol\";\r\n\r\ncontract AKEToken is ERC20, Ownable, IFourERC20 {\r\n    //\r\n    // The controller who can change the transfer mode.\r\n    //\r\n    address public _transferController;\r\n\r\n    //\r\n    // The transfer mode includes\r\n    // RESTRICTED  The transfer is disabled.  (Initial mode)\r\n    // CONTROLLED  The transfer can only performed between transfer controller and token owner.\r\n    // NORMAL      The transfer is enabled.\r\n    //\r\n    uint256 public _transferMode;\r\n\r\n    event ChangeTransferController(address oldValue, address newValue);\r\n    event ChangeTransferMode(uint256 oldValue, uint256 newValue);\r\n\r\n    constructor(\r\n        string memory name,\r\n        string memory symbol,\r\n        uint256 totalSupply\r\n    ) ERC20(name, symbol) Ownable(msg.sender) {\r\n        _mint(owner(), totalSupply);\r\n        _transferMode = TransferMode.CONTROLLED;\r\n        _transferController = owner();\r\n    }\r\n\r\n    function _update(\r\n        address from,\r\n        address to,\r\n        uint256 amount\r\n    ) internal virtual override {\r\n        if (_transferMode == TransferMode.RESTRICTED) {\r\n            revert(\"Transfer is restricted\");\r\n        }\r\n        if (_transferMode == TransferMode.CONTROLLED) {\r\n            require(from == _transferController || to == _transferController, \"Invalid transfer\");\r\n        }\r\n        super._update(from, to, amount);\r\n    }\r\n\r\n    function isTransferController(address account) external view returns (bool) {\r\n        return account == _transferController;\r\n    }\r\n\r\n    function setTransferMode(uint256 newValue) external {\r\n        require(msg.sender == _transferController, \"Caller is not the transfer controller\");\r\n        require(newValue <= TransferMode.MAX_VALUE, \"Invalid mode\");\r\n\r\n        if (_transferMode != TransferMode.NORMAL) {\r\n            uint256 oldValue = _transferMode;\r\n            _transferMode = newValue;\r\n            emit ChangeTransferMode(oldValue, newValue);\r\n        }\r\n    }\r\n\r\n    function setTransferController(address newValue) external onlyOwner {\r\n        address oldValue = _transferController;\r\n        _transferController = newValue;\r\n        emit ChangeTransferController(oldValue, newValue);\r\n    }\r\n}"},"contracts/IFourERC20.sol":{"content":"// SPDX-License-Identifier: MIT\r\npragma solidity ^0.8.0;\r\n\r\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\r\n\r\ninterface IFourERC20 is IERC20 {\r\n    function isTransferController(address account) external returns (bool);\r\n    function setTransferMode(uint256) external;\r\n}"},"contracts/TransferMode.sol":{"content":"// SPDX-License-Identifier: MIT\r\npragma solidity ^0.8.10;\r\n\r\nlibrary TransferMode {\r\n    uint256 public constant NORMAL = 0;\r\n    uint256 public constant RESTRICTED = 1;\r\n    uint256 public constant CONTROLLED = 2;\r\n    uint256 public constant MAX_VALUE = 2;\r\n}"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"},"@openzeppelin/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /**\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\n     */\n    error OwnableInvalidOwner(address owner);\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n     */\n    constructor(address initialOwner) {\n        if (initialOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        if (owner() != _msgSender()) {\n            revert OwnableUnauthorizedAccount(_msgSender());\n        }\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        if (newOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC-20\n * applications.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n    mapping(address account => uint256) private _balances;\n\n    mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * Both values are immutable: they can only be set once during construction.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the default value returned by this function, unless\n     * it's overridden.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `value`.\n     */\n    function transfer(address to, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Skips emitting an {Approval} event indicating an allowance update. This is not\n     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `value`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `value`.\n     */\n    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, value);\n        _transfer(from, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _transfer(address from, address to, uint256 value) internal {\n        if (from == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        if (to == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(from, to, value);\n    }\n\n    /**\n     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n     * this function.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _update(address from, address to, uint256 value) internal virtual {\n        if (from == address(0)) {\n            // Overflow check required: The rest of the code assumes that totalSupply never overflows\n            _totalSupply += value;\n        } else {\n            uint256 fromBalance = _balances[from];\n            if (fromBalance < value) {\n                revert ERC20InsufficientBalance(from, fromBalance, value);\n            }\n            unchecked {\n                // Overflow not possible: value <= fromBalance <= totalSupply.\n                _balances[from] = fromBalance - value;\n            }\n        }\n\n        if (to == address(0)) {\n            unchecked {\n                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n                _totalSupply -= value;\n            }\n        } else {\n            unchecked {\n                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n                _balances[to] += value;\n            }\n        }\n\n        emit Transfer(from, to, value);\n    }\n\n    /**\n     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n     * Relies on the `_update` mechanism\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _mint(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(address(0), account, value);\n    }\n\n    /**\n     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n     * Relies on the `_update` mechanism.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead\n     */\n    function _burn(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        _update(account, address(0), value);\n    }\n\n    /**\n     * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     *\n     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n     */\n    function _approve(address owner, address spender, uint256 value) internal {\n        _approve(owner, spender, value, true);\n    }\n\n    /**\n     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n     *\n     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n     * `Approval` event during `transferFrom` operations.\n     *\n     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n     * true using the following override:\n     *\n     * ```solidity\n     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n     *     super._approve(owner, spender, value, true);\n     * }\n     * ```\n     *\n     * Requirements are the same as {_approve}.\n     */\n    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n        if (owner == address(0)) {\n            revert ERC20InvalidApprover(address(0));\n        }\n        if (spender == address(0)) {\n            revert ERC20InvalidSpender(address(0));\n        }\n        _allowances[owner][spender] = value;\n        if (emitEvent) {\n            emit Approval(owner, spender, value);\n        }\n    }\n\n    /**\n     * @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n     *\n     * Does not update the allowance value in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Does not emit an {Approval} event.\n     */\n    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance < type(uint256).max) {\n            if (currentAllowance < value) {\n                revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n            }\n            unchecked {\n                _approve(owner, spender, currentAllowance - value, false);\n            }\n        }\n    }\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC20InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC20InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC20InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n    /**\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n     * Used in balance queries.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721InvalidOwner(address owner);\n\n    /**\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721NonexistentToken(uint256 tokenId);\n\n    /**\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param tokenId Identifier number of a token.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC721InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC721InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC721InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC1155InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC1155InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC1155MissingApprovalForAll(address operator, address owner);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC1155InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC1155InvalidOperator(address operator);\n\n    /**\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n     * Used in batch transfers.\n     * @param idsLength Length of the array of token identifiers\n     * @param valuesLength Length of the array of token amounts\n     */\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"}},"language":"Solidity","settings":{"optimizer":{"runs":200,"enabled":false},"evmVersion":"paris"}},"stdJsonOutput":{"sources":{"contracts/AKEToken.sol":{"id":6},"contracts/IFourERC20.sol":{"id":7},"contracts/TransferMode.sol":{"id":8},"@openzeppelin/contracts/utils/Context.sol":{"id":5},"@openzeppelin/contracts/access/Ownable.sol":{"id":0},"@openzeppelin/contracts/token/ERC20/ERC20.sol":{"id":2},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"id":3},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"id":1},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"id":4}},"contracts":{"contracts/AKEToken.sol":{"AKEToken":{"abi":[{"type":"constructor","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"symbol","type":"string","internalType":"string"},{"name":"totalSupply","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"name":"ERC20InsufficientAllowance","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InsufficientBalance","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InvalidApprover","type":"error","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidReceiver","type":"error","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSender","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSpender","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"name":"OwnableInvalidOwner","type":"error","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"name":"OwnableUnauthorizedAccount","type":"error","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"ChangeTransferController","type":"event","inputs":[{"name":"oldValue","type":"address","indexed":false,"internalType":"address"},{"name":"newValue","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"name":"ChangeTransferMode","type":"event","inputs":[{"name":"oldValue","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newValue","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"OwnershipTransferred","type":"event","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"_transferController","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"_transferMode","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"allowance","type":"function","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"decimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"name":"isTransferController","type":"function","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"renounceOwnership","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"setTransferController","type":"function","inputs":[{"name":"newValue","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setTransferMode","type":"function","inputs":[{"name":"newValue","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transfer","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferOwnership","type":"function","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"}],"metadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"}],\"name\":\"ChangeTransferController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"ChangeTransferMode\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_transferController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"_transferMode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isTransferController\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"}],\"name\":\"setTransferController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"setTransferMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`’s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/AKEToken.sol\":\"AKEToken\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x41f6b3b9e030561e7896dbef372b499cc8d418a80c3884a4d65a68f2fdc7493a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://80b0992a11b2fd1f75ced2971696d07bbd1d19ce6761dd50d8b6d48aa435f42a\",\"dweb:/ipfs/QmZDe5xd2gXHjVEjv9t8C1KQ68K5T8qFwdinwQgmP3rF3x\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"contracts/AKEToken.sol\":{\"keccak256\":\"0x8c6888be8581182831aa41e4af85bdefe633182dad7744d92016f7b02d90d125\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c4ce16bbe91283a57244d6bfeb4077c017e8a54f799a43556e270925fd2fe4bc\",\"dweb:/ipfs/Qme6yNggB6HE9LVb3yfbiKbUu1NYq8YAhDFnUEeUPkeecc\"]},\"contracts/IFourERC20.sol\":{\"keccak256\":\"0x78647367c623fe5f9652bec822a5f06ff6dbcc06c12dc619f6ab00236e2f209d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c8338abe43c994821c0d53fd3c4416de84f6bd530e01921ce70ed002be79f73\",\"dweb:/ipfs/QmX6BoEgf5bBDPLFmWWPVZNcPuc3tZtN5CN1M9YhtD8Fua\"]},\"contracts/TransferMode.sol\":{\"keccak256\":\"0xd985af6462053e2b3ba36084aa924980f6e0526670523b717320780eac38e6ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://45f83436d4910f7890cb6c5b18f5dc2abe063ecf84f300ad2fb2c605968209f9\",\"dweb:/ipfs/QmVpmnzPC2XT44pB5ZSv2JUDuA9ZQmkSa37Q5LjEuhbszj\"]}},\"version\":1}","userdoc":{"kind":"user","methods":{},"version":1},"devdoc":{"kind":"dev","errors":{"ERC20InvalidSender(address)":[{"params":{"sender":"Address whose tokens are being transferred."},"details":"Indicates a failure with the token `sender`. Used in transfers."}],"ERC20InvalidSpender(address)":[{"params":{"spender":"Address that may be allowed to operate on tokens without being their owner."},"details":"Indicates a failure with the `spender` to be approved. Used in approvals."}],"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"ERC20InvalidApprover(address)":[{"params":{"approver":"Address initiating an approval operation."},"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals."}],"ERC20InvalidReceiver(address)":[{"params":{"receiver":"Address to which tokens are being transferred."},"details":"Indicates a failure with the token `receiver`. Used in transfers."}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"params":{"needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred.","balance":"Current balance for the interacting account."},"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers."}],"ERC20InsufficientAllowance(address,uint256,uint256)":[{"params":{"needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner.","allowance":"Amount of tokens a `spender` is allowed to operate with."},"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers."}]},"events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"methods":{"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"storageLayout":{"types":{"t_address":{"label":"address","encoding":"inplace","numberOfBytes":"20"},"t_uint256":{"label":"uint256","encoding":"inplace","numberOfBytes":"32"},"t_string_storage":{"label":"string","encoding":"bytes","numberOfBytes":"32"},"t_mapping(t_address,t_uint256)":{"key":"t_address","label":"mapping(address => uint256)","value":"t_uint256","encoding":"mapping","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"key":"t_address","label":"mapping(address => mapping(address => uint256))","value":"t_mapping(t_address,t_uint256)","encoding":"mapping","numberOfBytes":"32"}},"storage":[{"slot":"0","type":"t_mapping(t_address,t_uint256)","astId":307,"label":"_balances","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))","astId":313,"label":"_allowances","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"2","type":"t_uint256","astId":315,"label":"_totalSupply","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"3","type":"t_string_storage","astId":317,"label":"_name","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"4","type":"t_string_storage","astId":319,"label":"_symbol","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"5","type":"t_address","astId":8,"label":"_owner","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"6","type":"t_address","astId":947,"label":"_transferController","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"},{"slot":"7","type":"t_uint256","astId":949,"label":"_transferMode","offset":0,"contract":"contracts/AKEToken.sol:AKEToken"}]},"transientStorageLayout":null,"evm":{"bytecode":{"object":"608060405234801561001057600080fd5b50604051612537380380612537833981810160405281019061003291906107ea565b33838381600390816100449190610a8c565b5080600490816100549190610a8c565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100c95760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100c09190610b9f565b60405180910390fd5b6100d88161015460201b60201c565b506100f66100ea61021a60201b60201c565b8261024460201b60201c565b600260078190555061010c61021a60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050610d67565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102b65760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102ad9190610b9f565b60405180910390fd5b6102c8600083836102cc60201b60201c565b5050565b600160075403610311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030890610c17565b60405180910390fd5b60026007540361040457600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806103c45750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103fa90610c83565b60405180910390fd5b5b61041583838361041a60201b60201c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361046c5780600260008282546104609190610cd2565b9250508190555061053f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156104f8578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016104ef93929190610d15565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361058857806002600082825403925050819055506105d5565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106329190610d4c565b60405180910390a3505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6106a68261065d565b810181811067ffffffffffffffff821117156106c5576106c461066e565b5b80604052505050565b60006106d861063f565b90506106e4828261069d565b919050565b600067ffffffffffffffff8211156107045761070361066e565b5b61070d8261065d565b9050602081019050919050565b60005b8381101561073857808201518184015260208101905061071d565b60008484015250505050565b6000610757610752846106e9565b6106ce565b90508281526020810184848401111561077357610772610658565b5b61077e84828561071a565b509392505050565b600082601f83011261079b5761079a610653565b5b81516107ab848260208601610744565b91505092915050565b6000819050919050565b6107c7816107b4565b81146107d257600080fd5b50565b6000815190506107e4816107be565b92915050565b60008060006060848603121561080357610802610649565b5b600084015167ffffffffffffffff8111156108215761082061064e565b5b61082d86828701610786565b935050602084015167ffffffffffffffff81111561084e5761084d61064e565b5b61085a86828701610786565b925050604061086b868287016107d5565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806108c757607f821691505b6020821081036108da576108d9610880565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026109427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610905565b61094c8683610905565b95508019841693508086168417925050509392505050565b6000819050919050565b600061098961098461097f846107b4565b610964565b6107b4565b9050919050565b6000819050919050565b6109a38361096e565b6109b76109af82610990565b848454610912565b825550505050565b600090565b6109cc6109bf565b6109d781848461099a565b505050565b5b818110156109fb576109f06000826109c4565b6001810190506109dd565b5050565b601f821115610a4057610a11816108e0565b610a1a846108f5565b81016020851015610a29578190505b610a3d610a35856108f5565b8301826109dc565b50505b505050565b600082821c905092915050565b6000610a6360001984600802610a45565b1980831691505092915050565b6000610a7c8383610a52565b9150826002028217905092915050565b610a9582610875565b67ffffffffffffffff811115610aae57610aad61066e565b5b610ab882546108af565b610ac38282856109ff565b600060209050601f831160018114610af65760008415610ae4578287015190505b610aee8582610a70565b865550610b56565b601f198416610b04866108e0565b60005b82811015610b2c57848901518255600182019150602085019450602081019050610b07565b86831015610b495784890151610b45601f891682610a52565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b8982610b5e565b9050919050565b610b9981610b7e565b82525050565b6000602082019050610bb46000830184610b90565b92915050565b600082825260208201905092915050565b7f5472616e73666572206973207265737472696374656400000000000000000000600082015250565b6000610c01601683610bba565b9150610c0c82610bcb565b602082019050919050565b60006020820190508181036000830152610c3081610bf4565b9050919050565b7f496e76616c6964207472616e7366657200000000000000000000000000000000600082015250565b6000610c6d601083610bba565b9150610c7882610c37565b602082019050919050565b60006020820190508181036000830152610c9c81610c60565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610cdd826107b4565b9150610ce8836107b4565b9250828201905080821115610d0057610cff610ca3565b5b92915050565b610d0f816107b4565b82525050565b6000606082019050610d2a6000830186610b90565b610d376020830185610d06565b610d446040830184610d06565b949350505050565b6000602082019050610d616000830184610d06565b92915050565b6117c180610d766000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063b217ee9711610071578063b217ee97146102ac578063bce62270146102dc578063dd62ed3e146102f8578063f2fde38b14610328578063ffc339c6146103445761010b565b80638da5cb5b1461022257806395d89b41146102405780639a1565971461025e578063a9059cbb1461027c5761010b565b80632a5868ff116100de5780632a5868ff146101ac578063313ce567146101ca57806370a08231146101e8578063715018a6146102185761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610360565b60405161012591906111c0565b60405180910390f35b6101486004803603810190610143919061127b565b6103f2565b60405161015591906112d6565b60405180910390f35b610166610415565b6040516101739190611300565b60405180910390f35b6101966004803603810190610191919061131b565b61041f565b6040516101a391906112d6565b60405180910390f35b6101b461044e565b6040516101c1919061137d565b60405180910390f35b6101d2610474565b6040516101df91906113b4565b60405180910390f35b61020260048036038101906101fd91906113cf565b61047d565b60405161020f9190611300565b60405180910390f35b6102206104c5565b005b61022a6104d9565b604051610237919061137d565b60405180910390f35b610248610503565b60405161025591906111c0565b60405180910390f35b610266610595565b6040516102739190611300565b60405180910390f35b6102966004803603810190610291919061127b565b61059b565b6040516102a391906112d6565b60405180910390f35b6102c660048036038101906102c191906113cf565b6105be565b6040516102d391906112d6565b60405180910390f35b6102f660048036038101906102f191906113fc565b610618565b005b610312600480360381019061030d9190611429565b610742565b60405161031f9190611300565b60405180910390f35b610342600480360381019061033d91906113cf565b6107c9565b005b61035e600480360381019061035991906113cf565b61084f565b005b60606003805461036f90611498565b80601f016020809104026020016040519081016040528092919081815260200182805461039b90611498565b80156103e85780601f106103bd576101008083540402835291602001916103e8565b820191906000526020600020905b8154815290600101906020018083116103cb57829003601f168201915b5050505050905090565b6000806103fd6108fc565b905061040a818585610904565b600191505092915050565b6000600254905090565b60008061042a6108fc565b9050610437858285610916565b6104428585856109ab565b60019150509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104cd610a9f565b6104d76000610b26565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461051290611498565b80601f016020809104026020016040519081016040528092919081815260200182805461053e90611498565b801561058b5780601f106105605761010080835404028352916020019161058b565b820191906000526020600020905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b60075481565b6000806105a66108fc565b90506105b38185856109ab565b600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f9061153b565b60405180910390fd5b60028111156106ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e3906115a7565b60405180910390fd5b60006007541461073f5760006007549050816007819055507f229aa33713d83257590af14156bb876c7928c6060a46edd8d19b7460ff431d6681836040516107359291906115c7565b60405180910390a1505b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6107d1610a9f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108435760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161083a919061137d565b60405180910390fd5b61084c81610b26565b50565b610857610a9f565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f18a20cd8522a3b9ece246a60b00675f1924437ea8112ca07f7c4bfb4294296b981836040516108f09291906115f0565b60405180910390a15050565b600033905090565b6109118383836001610bec565b505050565b60006109228484610742565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156109a55781811015610995578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161098c93929190611619565b60405180910390fd5b6109a484848484036000610bec565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a1d5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a14919061137d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8f5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a86919061137d565b60405180910390fd5b610a9a838383610dc3565b505050565b610aa76108fc565b73ffffffffffffffffffffffffffffffffffffffff16610ac56104d9565b73ffffffffffffffffffffffffffffffffffffffff1614610b2457610ae86108fc565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b1b919061137d565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610c5e5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610c55919061137d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cd05760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610cc7919061137d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610dbd578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610db49190611300565b60405180910390a35b50505050565b600160075403610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff9061169c565b60405180910390fd5b600260075403610efb57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ebb5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190611708565b60405180910390fd5b5b610f06838383610f0b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5d578060026000828254610f519190611757565b92505081905550611030565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fe9578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610fe093929190611619565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107957806002600082825403925050819055506110c6565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111239190611300565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561116a57808201518184015260208101905061114f565b60008484015250505050565b6000601f19601f8301169050919050565b600061119282611130565b61119c818561113b565b93506111ac81856020860161114c565b6111b581611176565b840191505092915050565b600060208201905081810360008301526111da8184611187565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611212826111e7565b9050919050565b61122281611207565b811461122d57600080fd5b50565b60008135905061123f81611219565b92915050565b6000819050919050565b61125881611245565b811461126357600080fd5b50565b6000813590506112758161124f565b92915050565b60008060408385031215611292576112916111e2565b5b60006112a085828601611230565b92505060206112b185828601611266565b9150509250929050565b60008115159050919050565b6112d0816112bb565b82525050565b60006020820190506112eb60008301846112c7565b92915050565b6112fa81611245565b82525050565b600060208201905061131560008301846112f1565b92915050565b600080600060608486031215611334576113336111e2565b5b600061134286828701611230565b935050602061135386828701611230565b925050604061136486828701611266565b9150509250925092565b61137781611207565b82525050565b6000602082019050611392600083018461136e565b92915050565b600060ff82169050919050565b6113ae81611398565b82525050565b60006020820190506113c960008301846113a5565b92915050565b6000602082840312156113e5576113e46111e2565b5b60006113f384828501611230565b91505092915050565b600060208284031215611412576114116111e2565b5b600061142084828501611266565b91505092915050565b600080604083850312156114405761143f6111e2565b5b600061144e85828601611230565b925050602061145f85828601611230565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114b057607f821691505b6020821081036114c3576114c2611469565b5b50919050565b7f43616c6c6572206973206e6f7420746865207472616e7366657220636f6e747260008201527f6f6c6c6572000000000000000000000000000000000000000000000000000000602082015250565b600061152560258361113b565b9150611530826114c9565b604082019050919050565b6000602082019050818103600083015261155481611518565b9050919050565b7f496e76616c6964206d6f64650000000000000000000000000000000000000000600082015250565b6000611591600c8361113b565b915061159c8261155b565b602082019050919050565b600060208201905081810360008301526115c081611584565b9050919050565b60006040820190506115dc60008301856112f1565b6115e960208301846112f1565b9392505050565b6000604082019050611605600083018561136e565b611612602083018461136e565b9392505050565b600060608201905061162e600083018661136e565b61163b60208301856112f1565b61164860408301846112f1565b949350505050565b7f5472616e73666572206973207265737472696374656400000000000000000000600082015250565b600061168660168361113b565b915061169182611650565b602082019050919050565b600060208201905081810360008301526116b581611679565b9050919050565b7f496e76616c6964207472616e7366657200000000000000000000000000000000600082015250565b60006116f260108361113b565b91506116fd826116bc565b602082019050919050565b60006020820190508181036000830152611721816116e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061176282611245565b915061176d83611245565b925082820190508082111561178557611784611728565b5b9291505056fea26469706673582212202d41cdab85fc4fb4f0f3e1277d1610a03fd947042d57b800fcd04c1cfc56ca1764736f6c634300081c0033","sourceMap":"232:2169:6:-:0;;;837:285;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;974:10;952:4;958:6;1656:5:2;1648;:13;;;;;;:::i;:::-;;1681:7;1671;:17;;;;;;:::i;:::-;;1582:113;;1297:1:0;1273:26;;:12;:26;;;1269:95;;1350:1;1322:31;;;;;;;;;;;:::i;:::-;;;;;;;;1269:95;1373:32;1392:12;1373:18;;;:32;;:::i;:::-;1225:187;997:27:6::2;1003:7;:5;;;:7;;:::i;:::-;1012:11;997:5;;;:27;;:::i;:::-;212:1:8;1035:13:6;:39;;;;1107:7;:5;;;:7;;:::i;:::-;1085:19;;:29;;;;;;;;;;;;;;;;;;837:285:::0;;;232:2169;;2912:187:0;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;1638:85::-;1684:7;1710:6;;;;;;;;;;;1703:13;;1638:85;:::o;7439:208:2:-;7528:1;7509:21;;:7;:21;;;7505:91;;7582:1;7553:32;;;;;;;;;;;:::i;:::-;;;;;;;;7505:91;7605:35;7621:1;7625:7;7634:5;7605:7;;;:35;;:::i;:::-;7439:208;;:::o;1130:452:6:-;167:1:8;1264:13:6;;:40;1260:105;;1321:32;;;;;;;;;;:::i;:::-;;;;;;;;1260:105;212:1:8;1379:13:6;;:40;1375:158;;1452:19;;;;;;;;;;;1444:27;;:4;:27;;;:56;;;;1481:19;;;;;;;;;;;1475:25;;:2;:25;;;1444:56;1436:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;1375:158;1543:31;1557:4;1563:2;1567:6;1543:13;;;:31;;:::i;:::-;1130:452;;;:::o;5989:1107:2:-;6094:1;6078:18;;:4;:18;;;6074:540;;6230:5;6214:12;;:21;;;;;;;:::i;:::-;;;;;;;;6074:540;;;6266:19;6288:9;:15;6298:4;6288:15;;;;;;;;;;;;;;;;6266:37;;6335:5;6321:11;:19;6317:115;;;6392:4;6398:11;6411:5;6367:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6317:115;6584:5;6570:11;:19;6552:9;:15;6562:4;6552:15;;;;;;;;;;;;;;;:37;;;;6252:362;6074:540;6642:1;6628:16;;:2;:16;;;6624:425;;6807:5;6791:12;;:21;;;;;;;;;;;6624:425;;;7019:5;7002:9;:13;7012:2;7002:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6624:425;7079:2;7064:25;;7073:4;7064:25;;;7083:5;7064:25;;;;;;:::i;:::-;;;;;;;;5989:1107;;;:::o;7:75:9:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:102;621:6;672:2;668:7;663:2;656:5;652:14;648:28;638:38;;580:102;;;:::o;688:180::-;736:77;733:1;726:88;833:4;830:1;823:15;857:4;854:1;847:15;874:281;957:27;979:4;957:27;:::i;:::-;949:6;945:40;1087:6;1075:10;1072:22;1051:18;1039:10;1036:34;1033:62;1030:88;;;1098:18;;:::i;:::-;1030:88;1138:10;1134:2;1127:22;917:238;874:281;;:::o;1161:129::-;1195:6;1222:20;;:::i;:::-;1212:30;;1251:33;1279:4;1271:6;1251:33;:::i;:::-;1161:129;;;:::o;1296:308::-;1358:4;1448:18;1440:6;1437:30;1434:56;;;1470:18;;:::i;:::-;1434:56;1508:29;1530:6;1508:29;:::i;:::-;1500:37;;1592:4;1586;1582:15;1574:23;;1296:308;;;:::o;1610:248::-;1692:1;1702:113;1716:6;1713:1;1710:13;1702:113;;;1801:1;1796:3;1792:11;1786:18;1782:1;1777:3;1773:11;1766:39;1738:2;1735:1;1731:10;1726:15;;1702:113;;;1849:1;1840:6;1835:3;1831:16;1824:27;1672:186;1610:248;;;:::o;1864:434::-;1953:5;1978:66;1994:49;2036:6;1994:49;:::i;:::-;1978:66;:::i;:::-;1969:75;;2067:6;2060:5;2053:21;2105:4;2098:5;2094:16;2143:3;2134:6;2129:3;2125:16;2122:25;2119:112;;;2150:79;;:::i;:::-;2119:112;2240:52;2285:6;2280:3;2275;2240:52;:::i;:::-;1959:339;1864:434;;;;;:::o;2318:355::-;2385:5;2434:3;2427:4;2419:6;2415:17;2411:27;2401:122;;2442:79;;:::i;:::-;2401:122;2552:6;2546:13;2577:90;2663:3;2655:6;2648:4;2640:6;2636:17;2577:90;:::i;:::-;2568:99;;2391:282;2318:355;;;;:::o;2679:77::-;2716:7;2745:5;2734:16;;2679:77;;;:::o;2762:122::-;2835:24;2853:5;2835:24;:::i;:::-;2828:5;2825:35;2815:63;;2874:1;2871;2864:12;2815:63;2762:122;:::o;2890:143::-;2947:5;2978:6;2972:13;2963:22;;2994:33;3021:5;2994:33;:::i;:::-;2890:143;;;;:::o;3039:1009::-;3147:6;3155;3163;3212:2;3200:9;3191:7;3187:23;3183:32;3180:119;;;3218:79;;:::i;:::-;3180:119;3359:1;3348:9;3344:17;3338:24;3389:18;3381:6;3378:30;3375:117;;;3411:79;;:::i;:::-;3375:117;3516:74;3582:7;3573:6;3562:9;3558:22;3516:74;:::i;:::-;3506:84;;3309:291;3660:2;3649:9;3645:18;3639:25;3691:18;3683:6;3680:30;3677:117;;;3713:79;;:::i;:::-;3677:117;3818:74;3884:7;3875:6;3864:9;3860:22;3818:74;:::i;:::-;3808:84;;3610:292;3941:2;3967:64;4023:7;4014:6;4003:9;3999:22;3967:64;:::i;:::-;3957:74;;3912:129;3039:1009;;;;;:::o;4054:99::-;4106:6;4140:5;4134:12;4124:22;;4054:99;;;:::o;4159:180::-;4207:77;4204:1;4197:88;4304:4;4301:1;4294:15;4328:4;4325:1;4318:15;4345:320;4389:6;4426:1;4420:4;4416:12;4406:22;;4473:1;4467:4;4463:12;4494:18;4484:81;;4550:4;4542:6;4538:17;4528:27;;4484:81;4612:2;4604:6;4601:14;4581:18;4578:38;4575:84;;4631:18;;:::i;:::-;4575:84;4396:269;4345:320;;;:::o;4671:141::-;4720:4;4743:3;4735:11;;4766:3;4763:1;4756:14;4800:4;4797:1;4787:18;4779:26;;4671:141;;;:::o;4818:93::-;4855:6;4902:2;4897;4890:5;4886:14;4882:23;4872:33;;4818:93;;;:::o;4917:107::-;4961:8;5011:5;5005:4;5001:16;4980:37;;4917:107;;;;:::o;5030:393::-;5099:6;5149:1;5137:10;5133:18;5172:97;5202:66;5191:9;5172:97;:::i;:::-;5290:39;5320:8;5309:9;5290:39;:::i;:::-;5278:51;;5362:4;5358:9;5351:5;5347:21;5338:30;;5411:4;5401:8;5397:19;5390:5;5387:30;5377:40;;5106:317;;5030:393;;;;;:::o;5429:60::-;5457:3;5478:5;5471:12;;5429:60;;;:::o;5495:142::-;5545:9;5578:53;5596:34;5605:24;5623:5;5605:24;:::i;:::-;5596:34;:::i;:::-;5578:53;:::i;:::-;5565:66;;5495:142;;;:::o;5643:75::-;5686:3;5707:5;5700:12;;5643:75;;;:::o;5724:269::-;5834:39;5865:7;5834:39;:::i;:::-;5895:91;5944:41;5968:16;5944:41;:::i;:::-;5936:6;5929:4;5923:11;5895:91;:::i;:::-;5889:4;5882:105;5800:193;5724:269;;;:::o;5999:73::-;6044:3;5999:73;:::o;6078:189::-;6155:32;;:::i;:::-;6196:65;6254:6;6246;6240:4;6196:65;:::i;:::-;6131:136;6078:189;;:::o;6273:186::-;6333:120;6350:3;6343:5;6340:14;6333:120;;;6404:39;6441:1;6434:5;6404:39;:::i;:::-;6377:1;6370:5;6366:13;6357:22;;6333:120;;;6273:186;;:::o;6465:543::-;6566:2;6561:3;6558:11;6555:446;;;6600:38;6632:5;6600:38;:::i;:::-;6684:29;6702:10;6684:29;:::i;:::-;6674:8;6670:44;6867:2;6855:10;6852:18;6849:49;;;6888:8;6873:23;;6849:49;6911:80;6967:22;6985:3;6967:22;:::i;:::-;6957:8;6953:37;6940:11;6911:80;:::i;:::-;6570:431;;6555:446;6465:543;;;:::o;7014:117::-;7068:8;7118:5;7112:4;7108:16;7087:37;;7014:117;;;;:::o;7137:169::-;7181:6;7214:51;7262:1;7258:6;7250:5;7247:1;7243:13;7214:51;:::i;:::-;7210:56;7295:4;7289;7285:15;7275:25;;7188:118;7137:169;;;;:::o;7311:295::-;7387:4;7533:29;7558:3;7552:4;7533:29;:::i;:::-;7525:37;;7595:3;7592:1;7588:11;7582:4;7579:21;7571:29;;7311:295;;;;:::o;7611:1395::-;7728:37;7761:3;7728:37;:::i;:::-;7830:18;7822:6;7819:30;7816:56;;;7852:18;;:::i;:::-;7816:56;7896:38;7928:4;7922:11;7896:38;:::i;:::-;7981:67;8041:6;8033;8027:4;7981:67;:::i;:::-;8075:1;8099:4;8086:17;;8131:2;8123:6;8120:14;8148:1;8143:618;;;;8805:1;8822:6;8819:77;;;8871:9;8866:3;8862:19;8856:26;8847:35;;8819:77;8922:67;8982:6;8975:5;8922:67;:::i;:::-;8916:4;8909:81;8778:222;8113:887;;8143:618;8195:4;8191:9;8183:6;8179:22;8229:37;8261:4;8229:37;:::i;:::-;8288:1;8302:208;8316:7;8313:1;8310:14;8302:208;;;8395:9;8390:3;8386:19;8380:26;8372:6;8365:42;8446:1;8438:6;8434:14;8424:24;;8493:2;8482:9;8478:18;8465:31;;8339:4;8336:1;8332:12;8327:17;;8302:208;;;8538:6;8529:7;8526:19;8523:179;;;8596:9;8591:3;8587:19;8581:26;8639:48;8681:4;8673:6;8669:17;8658:9;8639:48;:::i;:::-;8631:6;8624:64;8546:156;8523:179;8748:1;8744;8736:6;8732:14;8728:22;8722:4;8715:36;8150:611;;;8113:887;;7703:1303;;;7611:1395;;:::o;9012:126::-;9049:7;9089:42;9082:5;9078:54;9067:65;;9012:126;;;:::o;9144:96::-;9181:7;9210:24;9228:5;9210:24;:::i;:::-;9199:35;;9144:96;;;:::o;9246:118::-;9333:24;9351:5;9333:24;:::i;:::-;9328:3;9321:37;9246:118;;:::o;9370:222::-;9463:4;9501:2;9490:9;9486:18;9478:26;;9514:71;9582:1;9571:9;9567:17;9558:6;9514:71;:::i;:::-;9370:222;;;;:::o;9598:169::-;9682:11;9716:6;9711:3;9704:19;9756:4;9751:3;9747:14;9732:29;;9598:169;;;;:::o;9773:172::-;9913:24;9909:1;9901:6;9897:14;9890:48;9773:172;:::o;9951:366::-;10093:3;10114:67;10178:2;10173:3;10114:67;:::i;:::-;10107:74;;10190:93;10279:3;10190:93;:::i;:::-;10308:2;10303:3;10299:12;10292:19;;9951:366;;;:::o;10323:419::-;10489:4;10527:2;10516:9;10512:18;10504:26;;10576:9;10570:4;10566:20;10562:1;10551:9;10547:17;10540:47;10604:131;10730:4;10604:131;:::i;:::-;10596:139;;10323:419;;;:::o;10748:166::-;10888:18;10884:1;10876:6;10872:14;10865:42;10748:166;:::o;10920:366::-;11062:3;11083:67;11147:2;11142:3;11083:67;:::i;:::-;11076:74;;11159:93;11248:3;11159:93;:::i;:::-;11277:2;11272:3;11268:12;11261:19;;10920:366;;;:::o;11292:419::-;11458:4;11496:2;11485:9;11481:18;11473:26;;11545:9;11539:4;11535:20;11531:1;11520:9;11516:17;11509:47;11573:131;11699:4;11573:131;:::i;:::-;11565:139;;11292:419;;;:::o;11717:180::-;11765:77;11762:1;11755:88;11862:4;11859:1;11852:15;11886:4;11883:1;11876:15;11903:191;11943:3;11962:20;11980:1;11962:20;:::i;:::-;11957:25;;11996:20;12014:1;11996:20;:::i;:::-;11991:25;;12039:1;12036;12032:9;12025:16;;12060:3;12057:1;12054:10;12051:36;;;12067:18;;:::i;:::-;12051:36;11903:191;;;;:::o;12100:118::-;12187:24;12205:5;12187:24;:::i;:::-;12182:3;12175:37;12100:118;;:::o;12224:442::-;12373:4;12411:2;12400:9;12396:18;12388:26;;12424:71;12492:1;12481:9;12477:17;12468:6;12424:71;:::i;:::-;12505:72;12573:2;12562:9;12558:18;12549:6;12505:72;:::i;:::-;12587;12655:2;12644:9;12640:18;12631:6;12587:72;:::i;:::-;12224:442;;;;;;:::o;12672:222::-;12765:4;12803:2;12792:9;12788:18;12780:26;;12816:71;12884:1;12873:9;12869:17;12860:6;12816:71;:::i;:::-;12672:222;;;;:::o;232:2169:6:-;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063b217ee9711610071578063b217ee97146102ac578063bce62270146102dc578063dd62ed3e146102f8578063f2fde38b14610328578063ffc339c6146103445761010b565b80638da5cb5b1461022257806395d89b41146102405780639a1565971461025e578063a9059cbb1461027c5761010b565b80632a5868ff116100de5780632a5868ff146101ac578063313ce567146101ca57806370a08231146101e8578063715018a6146102185761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610360565b60405161012591906111c0565b60405180910390f35b6101486004803603810190610143919061127b565b6103f2565b60405161015591906112d6565b60405180910390f35b610166610415565b6040516101739190611300565b60405180910390f35b6101966004803603810190610191919061131b565b61041f565b6040516101a391906112d6565b60405180910390f35b6101b461044e565b6040516101c1919061137d565b60405180910390f35b6101d2610474565b6040516101df91906113b4565b60405180910390f35b61020260048036038101906101fd91906113cf565b61047d565b60405161020f9190611300565b60405180910390f35b6102206104c5565b005b61022a6104d9565b604051610237919061137d565b60405180910390f35b610248610503565b60405161025591906111c0565b60405180910390f35b610266610595565b6040516102739190611300565b60405180910390f35b6102966004803603810190610291919061127b565b61059b565b6040516102a391906112d6565b60405180910390f35b6102c660048036038101906102c191906113cf565b6105be565b6040516102d391906112d6565b60405180910390f35b6102f660048036038101906102f191906113fc565b610618565b005b610312600480360381019061030d9190611429565b610742565b60405161031f9190611300565b60405180910390f35b610342600480360381019061033d91906113cf565b6107c9565b005b61035e600480360381019061035991906113cf565b61084f565b005b60606003805461036f90611498565b80601f016020809104026020016040519081016040528092919081815260200182805461039b90611498565b80156103e85780601f106103bd576101008083540402835291602001916103e8565b820191906000526020600020905b8154815290600101906020018083116103cb57829003601f168201915b5050505050905090565b6000806103fd6108fc565b905061040a818585610904565b600191505092915050565b6000600254905090565b60008061042a6108fc565b9050610437858285610916565b6104428585856109ab565b60019150509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104cd610a9f565b6104d76000610b26565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461051290611498565b80601f016020809104026020016040519081016040528092919081815260200182805461053e90611498565b801561058b5780601f106105605761010080835404028352916020019161058b565b820191906000526020600020905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b60075481565b6000806105a66108fc565b90506105b38185856109ab565b600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f9061153b565b60405180910390fd5b60028111156106ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e3906115a7565b60405180910390fd5b60006007541461073f5760006007549050816007819055507f229aa33713d83257590af14156bb876c7928c6060a46edd8d19b7460ff431d6681836040516107359291906115c7565b60405180910390a1505b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6107d1610a9f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108435760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161083a919061137d565b60405180910390fd5b61084c81610b26565b50565b610857610a9f565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f18a20cd8522a3b9ece246a60b00675f1924437ea8112ca07f7c4bfb4294296b981836040516108f09291906115f0565b60405180910390a15050565b600033905090565b6109118383836001610bec565b505050565b60006109228484610742565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156109a55781811015610995578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161098c93929190611619565b60405180910390fd5b6109a484848484036000610bec565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a1d5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a14919061137d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8f5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a86919061137d565b60405180910390fd5b610a9a838383610dc3565b505050565b610aa76108fc565b73ffffffffffffffffffffffffffffffffffffffff16610ac56104d9565b73ffffffffffffffffffffffffffffffffffffffff1614610b2457610ae86108fc565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b1b919061137d565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610c5e5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610c55919061137d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cd05760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610cc7919061137d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610dbd578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610db49190611300565b60405180910390a35b50505050565b600160075403610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff9061169c565b60405180910390fd5b600260075403610efb57600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ebb5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190611708565b60405180910390fd5b5b610f06838383610f0b565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5d578060026000828254610f519190611757565b92505081905550611030565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610fe9578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610fe093929190611619565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107957806002600082825403925050819055506110c6565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111239190611300565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561116a57808201518184015260208101905061114f565b60008484015250505050565b6000601f19601f8301169050919050565b600061119282611130565b61119c818561113b565b93506111ac81856020860161114c565b6111b581611176565b840191505092915050565b600060208201905081810360008301526111da8184611187565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611212826111e7565b9050919050565b61122281611207565b811461122d57600080fd5b50565b60008135905061123f81611219565b92915050565b6000819050919050565b61125881611245565b811461126357600080fd5b50565b6000813590506112758161124f565b92915050565b60008060408385031215611292576112916111e2565b5b60006112a085828601611230565b92505060206112b185828601611266565b9150509250929050565b60008115159050919050565b6112d0816112bb565b82525050565b60006020820190506112eb60008301846112c7565b92915050565b6112fa81611245565b82525050565b600060208201905061131560008301846112f1565b92915050565b600080600060608486031215611334576113336111e2565b5b600061134286828701611230565b935050602061135386828701611230565b925050604061136486828701611266565b9150509250925092565b61137781611207565b82525050565b6000602082019050611392600083018461136e565b92915050565b600060ff82169050919050565b6113ae81611398565b82525050565b60006020820190506113c960008301846113a5565b92915050565b6000602082840312156113e5576113e46111e2565b5b60006113f384828501611230565b91505092915050565b600060208284031215611412576114116111e2565b5b600061142084828501611266565b91505092915050565b600080604083850312156114405761143f6111e2565b5b600061144e85828601611230565b925050602061145f85828601611230565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806114b057607f821691505b6020821081036114c3576114c2611469565b5b50919050565b7f43616c6c6572206973206e6f7420746865207472616e7366657220636f6e747260008201527f6f6c6c6572000000000000000000000000000000000000000000000000000000602082015250565b600061152560258361113b565b9150611530826114c9565b604082019050919050565b6000602082019050818103600083015261155481611518565b9050919050565b7f496e76616c6964206d6f64650000000000000000000000000000000000000000600082015250565b6000611591600c8361113b565b915061159c8261155b565b602082019050919050565b600060208201905081810360008301526115c081611584565b9050919050565b60006040820190506115dc60008301856112f1565b6115e960208301846112f1565b9392505050565b6000604082019050611605600083018561136e565b611612602083018461136e565b9392505050565b600060608201905061162e600083018661136e565b61163b60208301856112f1565b61164860408301846112f1565b949350505050565b7f5472616e73666572206973207265737472696374656400000000000000000000600082015250565b600061168660168361113b565b915061169182611650565b602082019050919050565b600060208201905081810360008301526116b581611679565b9050919050565b7f496e76616c6964207472616e7366657200000000000000000000000000000000600082015250565b60006116f260108361113b565b91506116fd826116bc565b602082019050919050565b60006020820190508181036000830152611721816116e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061176282611245565b915061176d83611245565b925082820190508082111561178557611784611728565b5b9291505056fea26469706673582212202d41cdab85fc4fb4f0f3e1277d1610a03fd947042d57b800fcd04c1cfc56ca1764736f6c634300081c0033","sourceMap":"232:2169:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3979:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2830:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4757:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;360:34:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2688:82:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2985:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2293:101:0;;;:::i;:::-;;1638:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1962:93:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;658:28:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3296:178:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1590:132:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1730:434;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3532:140:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2543:215:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2172:226:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1760:89:2;1805:13;1837:5;1830:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:89;:::o;3979:186::-;4052:4;4068:13;4084:12;:10;:12::i;:::-;4068:28;;4106:31;4115:5;4122:7;4131:5;4106:8;:31::i;:::-;4154:4;4147:11;;;3979:186;;;;:::o;2830:97::-;2882:7;2908:12;;2901:19;;2830:97;:::o;4757:244::-;4844:4;4860:15;4878:12;:10;:12::i;:::-;4860:30;;4900:37;4916:4;4922:7;4931:5;4900:15;:37::i;:::-;4947:26;4957:4;4963:2;4967:5;4947:9;:26::i;:::-;4990:4;4983:11;;;4757:244;;;;;:::o;360:34:6:-;;;;;;;;;;;;;:::o;2688:82:2:-;2737:5;2761:2;2754:9;;2688:82;:::o;2985:116::-;3050:7;3076:9;:18;3086:7;3076:18;;;;;;;;;;;;;;;;3069:25;;2985:116;;;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1638:85::-;1684:7;1710:6;;;;;;;;;;;1703:13;;1638:85;:::o;1962:93:2:-;2009:13;2041:7;2034:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1962:93;:::o;658:28:6:-;;;;:::o;3296:178:2:-;3365:4;3381:13;3397:12;:10;:12::i;:::-;3381:28;;3419:27;3429:5;3436:2;3440:5;3419:9;:27::i;:::-;3463:4;3456:11;;;3296:178;;;;:::o;1590:132:6:-;1660:4;1695:19;;;;;;;;;;;1684:30;;:7;:30;;;1677:37;;1590:132;;;:::o;1730:434::-;1815:19;;;;;;;;;;;1801:33;;:10;:33;;;1793:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;256:1:8;1895:8:6;:34;;1887:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;122:1:8;1963:13:6;;:36;1959:198;;2016:16;2035:13;;2016:32;;2079:8;2063:13;:24;;;;2107:38;2126:8;2136;2107:38;;;;;;;:::i;:::-;;;;;;;;2001:156;1959:198;1730:434;:::o;3532:140:2:-;3612:7;3638:11;:18;3650:5;3638:18;;;;;;;;;;;;;;;:27;3657:7;3638:27;;;;;;;;;;;;;;;;3631:34;;3532:140;;;;:::o;2543:215:0:-;1531:13;:11;:13::i;:::-;2647:1:::1;2627:22;;:8;:22;;::::0;2623:91:::1;;2700:1;2672:31;;;;;;;;;;;:::i;:::-;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;2172:226:6:-;1531:13:0;:11;:13::i;:::-;2251:16:6::1;2270:19;;;;;;;;;;;2251:38;;2322:8;2300:19;;:30;;;;;;;;;;;;;;;;;;2346:44;2371:8;2381;2346:44;;;;;;;:::i;:::-;;;;;;;;2240:158;2172:226:::0;:::o;656:96:5:-;709:7;735:10;728:17;;656:96;:::o;8707:128:2:-;8791:37;8800:5;8807:7;8816:5;8823:4;8791:8;:37::i;:::-;8707:128;;;:::o;10396:476::-;10495:24;10522:25;10532:5;10539:7;10522:9;:25::i;:::-;10495:52;;10580:17;10561:16;:36;10557:309;;;10636:5;10617:16;:24;10613:130;;;10695:7;10704:16;10722:5;10668:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10613:130;10784:57;10793:5;10800:7;10828:5;10809:16;:24;10835:5;10784:8;:57::i;:::-;10557:309;10485:387;10396:476;;;:::o;5374:300::-;5473:1;5457:18;;:4;:18;;;5453:86;;5525:1;5498:30;;;;;;;;;;;:::i;:::-;;;;;;;;5453:86;5566:1;5552:16;;:2;:16;;;5548:86;;5620:1;5591:32;;;;;;;;;;;:::i;:::-;;;;;;;;5548:86;5643:24;5651:4;5657:2;5661:5;5643:7;:24::i;:::-;5374:300;;;:::o;1796:162:0:-;1866:12;:10;:12::i;:::-;1855:23;;:7;:5;:7::i;:::-;:23;;;1851:101;;1928:12;:10;:12::i;:::-;1901:40;;;;;;;;;;;:::i;:::-;;;;;;;;1851:101;1796:162::o;2912:187::-;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;9682:432:2:-;9811:1;9794:19;;:5;:19;;;9790:89;;9865:1;9836:32;;;;;;;;;;;:::i;:::-;;;;;;;;9790:89;9911:1;9892:21;;:7;:21;;;9888:90;;9964:1;9936:31;;;;;;;;;;;:::i;:::-;;;;;;;;9888:90;10017:5;9987:11;:18;9999:5;9987:18;;;;;;;;;;;;;;;:27;10006:7;9987:27;;;;;;;;;;;;;;;:35;;;;10036:9;10032:76;;;10082:7;10066:31;;10075:5;10066:31;;;10091:5;10066:31;;;;;;:::i;:::-;;;;;;;;10032:76;9682:432;;;;:::o;1130:452:6:-;167:1:8;1264:13:6;;:40;1260:105;;1321:32;;;;;;;;;;:::i;:::-;;;;;;;;1260:105;212:1:8;1379:13:6;;:40;1375:158;;1452:19;;;;;;;;;;;1444:27;;:4;:27;;;:56;;;;1481:19;;;;;;;;;;;1475:25;;:2;:25;;;1444:56;1436:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;1375:158;1543:31;1557:4;1563:2;1567:6;1543:13;:31::i;:::-;1130:452;;;:::o;5989:1107:2:-;6094:1;6078:18;;:4;:18;;;6074:540;;6230:5;6214:12;;:21;;;;;;;:::i;:::-;;;;;;;;6074:540;;;6266:19;6288:9;:15;6298:4;6288:15;;;;;;;;;;;;;;;;6266:37;;6335:5;6321:11;:19;6317:115;;;6392:4;6398:11;6411:5;6367:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6317:115;6584:5;6570:11;:19;6552:9;:15;6562:4;6552:15;;;;;;;;;;;;;;;:37;;;;6252:362;6074:540;6642:1;6628:16;;:2;:16;;;6624:425;;6807:5;6791:12;;:21;;;;;;;;;;;6624:425;;;7019:5;7002:9;:13;7012:2;7002:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6624:425;7079:2;7064:25;;7073:4;7064:25;;;7083:5;7064:25;;;;;;:::i;:::-;;;;;;;;5989:1107;;;:::o;7:99:9:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:248::-;369:1;379:113;393:6;390:1;387:13;379:113;;;478:1;473:3;469:11;463:18;459:1;454:3;450:11;443:39;415:2;412:1;408:10;403:15;;379:113;;;526:1;517:6;512:3;508:16;501:27;349:186;287:248;;;:::o;541:102::-;582:6;633:2;629:7;624:2;617:5;613:14;609:28;599:38;;541:102;;;:::o;649:377::-;737:3;765:39;798:5;765:39;:::i;:::-;820:71;884:6;879:3;820:71;:::i;:::-;813:78;;900:65;958:6;953:3;946:4;939:5;935:16;900:65;:::i;:::-;990:29;1012:6;990:29;:::i;:::-;985:3;981:39;974:46;;741:285;649:377;;;;:::o;1032:313::-;1145:4;1183:2;1172:9;1168:18;1160:26;;1232:9;1226:4;1222:20;1218:1;1207:9;1203:17;1196:47;1260:78;1333:4;1324:6;1260:78;:::i;:::-;1252:86;;1032:313;;;;:::o;1432:117::-;1541:1;1538;1531:12;1678:126;1715:7;1755:42;1748:5;1744:54;1733:65;;1678:126;;;:::o;1810:96::-;1847:7;1876:24;1894:5;1876:24;:::i;:::-;1865:35;;1810:96;;;:::o;1912:122::-;1985:24;2003:5;1985:24;:::i;:::-;1978:5;1975:35;1965:63;;2024:1;2021;2014:12;1965:63;1912:122;:::o;2040:139::-;2086:5;2124:6;2111:20;2102:29;;2140:33;2167:5;2140:33;:::i;:::-;2040:139;;;;:::o;2185:77::-;2222:7;2251:5;2240:16;;2185:77;;;:::o;2268:122::-;2341:24;2359:5;2341:24;:::i;:::-;2334:5;2331:35;2321:63;;2380:1;2377;2370:12;2321:63;2268:122;:::o;2396:139::-;2442:5;2480:6;2467:20;2458:29;;2496:33;2523:5;2496:33;:::i;:::-;2396:139;;;;:::o;2541:474::-;2609:6;2617;2666:2;2654:9;2645:7;2641:23;2637:32;2634:119;;;2672:79;;:::i;:::-;2634:119;2792:1;2817:53;2862:7;2853:6;2842:9;2838:22;2817:53;:::i;:::-;2807:63;;2763:117;2919:2;2945:53;2990:7;2981:6;2970:9;2966:22;2945:53;:::i;:::-;2935:63;;2890:118;2541:474;;;;;:::o;3021:90::-;3055:7;3098:5;3091:13;3084:21;3073:32;;3021:90;;;:::o;3117:109::-;3198:21;3213:5;3198:21;:::i;:::-;3193:3;3186:34;3117:109;;:::o;3232:210::-;3319:4;3357:2;3346:9;3342:18;3334:26;;3370:65;3432:1;3421:9;3417:17;3408:6;3370:65;:::i;:::-;3232:210;;;;:::o;3448:118::-;3535:24;3553:5;3535:24;:::i;:::-;3530:3;3523:37;3448:118;;:::o;3572:222::-;3665:4;3703:2;3692:9;3688:18;3680:26;;3716:71;3784:1;3773:9;3769:17;3760:6;3716:71;:::i;:::-;3572:222;;;;:::o;3800:619::-;3877:6;3885;3893;3942:2;3930:9;3921:7;3917:23;3913:32;3910:119;;;3948:79;;:::i;:::-;3910:119;4068:1;4093:53;4138:7;4129:6;4118:9;4114:22;4093:53;:::i;:::-;4083:63;;4039:117;4195:2;4221:53;4266:7;4257:6;4246:9;4242:22;4221:53;:::i;:::-;4211:63;;4166:118;4323:2;4349:53;4394:7;4385:6;4374:9;4370:22;4349:53;:::i;:::-;4339:63;;4294:118;3800:619;;;;;:::o;4425:118::-;4512:24;4530:5;4512:24;:::i;:::-;4507:3;4500:37;4425:118;;:::o;4549:222::-;4642:4;4680:2;4669:9;4665:18;4657:26;;4693:71;4761:1;4750:9;4746:17;4737:6;4693:71;:::i;:::-;4549:222;;;;:::o;4777:86::-;4812:7;4852:4;4845:5;4841:16;4830:27;;4777:86;;;:::o;4869:112::-;4952:22;4968:5;4952:22;:::i;:::-;4947:3;4940:35;4869:112;;:::o;4987:214::-;5076:4;5114:2;5103:9;5099:18;5091:26;;5127:67;5191:1;5180:9;5176:17;5167:6;5127:67;:::i;:::-;4987:214;;;;:::o;5207:329::-;5266:6;5315:2;5303:9;5294:7;5290:23;5286:32;5283:119;;;5321:79;;:::i;:::-;5283:119;5441:1;5466:53;5511:7;5502:6;5491:9;5487:22;5466:53;:::i;:::-;5456:63;;5412:117;5207:329;;;;:::o;5542:::-;5601:6;5650:2;5638:9;5629:7;5625:23;5621:32;5618:119;;;5656:79;;:::i;:::-;5618:119;5776:1;5801:53;5846:7;5837:6;5826:9;5822:22;5801:53;:::i;:::-;5791:63;;5747:117;5542:329;;;;:::o;5877:474::-;5945:6;5953;6002:2;5990:9;5981:7;5977:23;5973:32;5970:119;;;6008:79;;:::i;:::-;5970:119;6128:1;6153:53;6198:7;6189:6;6178:9;6174:22;6153:53;:::i;:::-;6143:63;;6099:117;6255:2;6281:53;6326:7;6317:6;6306:9;6302:22;6281:53;:::i;:::-;6271:63;;6226:118;5877:474;;;;;:::o;6357:180::-;6405:77;6402:1;6395:88;6502:4;6499:1;6492:15;6526:4;6523:1;6516:15;6543:320;6587:6;6624:1;6618:4;6614:12;6604:22;;6671:1;6665:4;6661:12;6692:18;6682:81;;6748:4;6740:6;6736:17;6726:27;;6682:81;6810:2;6802:6;6799:14;6779:18;6776:38;6773:84;;6829:18;;:::i;:::-;6773:84;6594:269;6543:320;;;:::o;6869:224::-;7009:34;7005:1;6997:6;6993:14;6986:58;7078:7;7073:2;7065:6;7061:15;7054:32;6869:224;:::o;7099:366::-;7241:3;7262:67;7326:2;7321:3;7262:67;:::i;:::-;7255:74;;7338:93;7427:3;7338:93;:::i;:::-;7456:2;7451:3;7447:12;7440:19;;7099:366;;;:::o;7471:419::-;7637:4;7675:2;7664:9;7660:18;7652:26;;7724:9;7718:4;7714:20;7710:1;7699:9;7695:17;7688:47;7752:131;7878:4;7752:131;:::i;:::-;7744:139;;7471:419;;;:::o;7896:162::-;8036:14;8032:1;8024:6;8020:14;8013:38;7896:162;:::o;8064:366::-;8206:3;8227:67;8291:2;8286:3;8227:67;:::i;:::-;8220:74;;8303:93;8392:3;8303:93;:::i;:::-;8421:2;8416:3;8412:12;8405:19;;8064:366;;;:::o;8436:419::-;8602:4;8640:2;8629:9;8625:18;8617:26;;8689:9;8683:4;8679:20;8675:1;8664:9;8660:17;8653:47;8717:131;8843:4;8717:131;:::i;:::-;8709:139;;8436:419;;;:::o;8861:332::-;8982:4;9020:2;9009:9;9005:18;8997:26;;9033:71;9101:1;9090:9;9086:17;9077:6;9033:71;:::i;:::-;9114:72;9182:2;9171:9;9167:18;9158:6;9114:72;:::i;:::-;8861:332;;;;;:::o;9199:::-;9320:4;9358:2;9347:9;9343:18;9335:26;;9371:71;9439:1;9428:9;9424:17;9415:6;9371:71;:::i;:::-;9452:72;9520:2;9509:9;9505:18;9496:6;9452:72;:::i;:::-;9199:332;;;;;:::o;9537:442::-;9686:4;9724:2;9713:9;9709:18;9701:26;;9737:71;9805:1;9794:9;9790:17;9781:6;9737:71;:::i;:::-;9818:72;9886:2;9875:9;9871:18;9862:6;9818:72;:::i;:::-;9900;9968:2;9957:9;9953:18;9944:6;9900:72;:::i;:::-;9537:442;;;;;;:::o;9985:172::-;10125:24;10121:1;10113:6;10109:14;10102:48;9985:172;:::o;10163:366::-;10305:3;10326:67;10390:2;10385:3;10326:67;:::i;:::-;10319:74;;10402:93;10491:3;10402:93;:::i;:::-;10520:2;10515:3;10511:12;10504:19;;10163:366;;;:::o;10535:419::-;10701:4;10739:2;10728:9;10724:18;10716:26;;10788:9;10782:4;10778:20;10774:1;10763:9;10759:17;10752:47;10816:131;10942:4;10816:131;:::i;:::-;10808:139;;10535:419;;;:::o;10960:166::-;11100:18;11096:1;11088:6;11084:14;11077:42;10960:166;:::o;11132:366::-;11274:3;11295:67;11359:2;11354:3;11295:67;:::i;:::-;11288:74;;11371:93;11460:3;11371:93;:::i;:::-;11489:2;11484:3;11480:12;11473:19;;11132:366;;;:::o;11504:419::-;11670:4;11708:2;11697:9;11693:18;11685:26;;11757:9;11751:4;11747:20;11743:1;11732:9;11728:17;11721:47;11785:131;11911:4;11785:131;:::i;:::-;11777:139;;11504:419;;;:::o;11929:180::-;11977:77;11974:1;11967:88;12074:4;12071:1;12064:15;12098:4;12095:1;12088:15;12115:191;12155:3;12174:20;12192:1;12174:20;:::i;:::-;12169:25;;12208:20;12226:1;12208:20;:::i;:::-;12203:25;;12251:1;12248;12244:9;12237:16;;12272:3;12269:1;12266:10;12263:36;;;12279:18;;:::i;:::-;12263:36;12115:191;;;;:::o","linkReferences":{},"immutableReferences":{}}}}}}},"signatures":{"function":[{"signature":"allowance(address,address)","signatureHash4":"0xdd62ed3e","signatureHash32":"0xdd62ed3e90e97b3d417db9c0c7522647811bafca5afc6694f143588d255fdfb4"},{"signature":"approve(address,uint256)","signatureHash4":"0x095ea7b3","signatureHash32":"0x095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba"},{"signature":"balanceOf(address)","signatureHash4":"0x70a08231","signatureHash32":"0x70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be"},{"signature":"decimals()","signatureHash4":"0x313ce567","signatureHash32":"0x313ce567add4d438edf58b94ff345d7d38c45b17dfc0f947988d7819dca364f9"},{"signature":"isTransferController(address)","signatureHash4":"0xb217ee97","signatureHash32":"0xb217ee9733363290a948b5b97cc8fb5f8c3ae3dfca10308291d61fe6c661d547"},{"signature":"name()","signatureHash4":"0x06fdde03","signatureHash32":"0x06fdde0383f15d582d1a74511486c9ddf862a882fb7904b3d9fe9b8b8e58a796"},{"signature":"owner()","signatureHash4":"0x8da5cb5b","signatureHash32":"0x8da5cb5b36e7f68c1d2e56001220cdbdd3ba2616072f718acfda4a06441a807d"},{"signature":"renounceOwnership()","signatureHash4":"0x715018a6","signatureHash32":"0x715018a616b5f2044428f6fadb7deef4ce9ca76ef60ea57978964ad137bbe7ae"},{"signature":"setTransferController(address)","signatureHash4":"0xffc339c6","signatureHash32":"0xffc339c65b8e5bbaf23ddb5328f5f0a52083f276b883ea598549e1371adcbae7"},{"signature":"setTransferMode(uint256)","signatureHash4":"0xbce62270","signatureHash32":"0xbce622705caba1ecd2e0db1499a20163d24471b648813c08265a5545d43269a4"},{"signature":"symbol()","signatureHash4":"0x95d89b41","signatureHash32":"0x95d89b41e2f5f391a79ec54e9d87c79d6e777c63e32c28da95b4e9e4a79250ec"},{"signature":"totalSupply()","signatureHash4":"0x18160ddd","signatureHash32":"0x18160ddd7f15c72528c2f94fd8dfe3c8d5aa26e2c50c7d81f4bc7bee8d4b7932"},{"signature":"transfer(address,uint256)","signatureHash4":"0xa9059cbb","signatureHash32":"0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b"},{"signature":"_transferController()","signatureHash4":"0x2a5868ff","signatureHash32":"0x2a5868ff425b69ce337a93c2acdabcc712ae5e383a1458fd5bd3ae6f6cd8727a"},{"signature":"transferFrom(address,address,uint256)","signatureHash4":"0x23b872dd","signatureHash32":"0x23b872dd7302113369cda2901243429419bec145408fa8b352b3dd92b66c680b"},{"signature":"_transferMode()","signatureHash4":"0x9a156597","signatureHash32":"0x9a156597bb90a89d1a43cfc590aaaa1b2178772ddf2e4dd4f2930fd003596b5f"},{"signature":"transferOwnership(address)","signatureHash4":"0xf2fde38b","signatureHash32":"0xf2fde38b092330466c661fc723d5289b90272a3e580e3187d1d7ef788506c557"}],"event":[{"signature":"Approval(address,address,uint256)","signatureHash4":"0x8c5be1e5","signatureHash32":"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925"},{"signature":"ChangeTransferController(address,address)","signatureHash4":"0x18a20cd8","signatureHash32":"0x18a20cd8522a3b9ece246a60b00675f1924437ea8112ca07f7c4bfb4294296b9"},{"signature":"ChangeTransferMode(uint256,uint256)","signatureHash4":"0x229aa337","signatureHash32":"0x229aa33713d83257590af14156bb876c7928c6060a46edd8d19b7460ff431d66"},{"signature":"OwnershipTransferred(address,address)","signatureHash4":"0x8be0079c","signatureHash32":"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0"},{"signature":"Transfer(address,address,uint256)","signatureHash4":"0xddf252ad","signatureHash32":"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"}],"error":[{"signature":"ERC20InsufficientAllowance(address,uint256,uint256)","signatureHash4":"0xfb8f41b2","signatureHash32":"0xfb8f41b23e99d2101d86da76cdfa87dd51c82ed07d3cb62cbc473e469dbc75c3"},{"signature":"ERC20InsufficientBalance(address,uint256,uint256)","signatureHash4":"0xe450d38c","signatureHash32":"0xe450d38cd8d9f7d95077d567d60ed49c7254716e6ad08fc9872816c97e0ffec6"},{"signature":"ERC20InvalidApprover(address)","signatureHash4":"0xe602df05","signatureHash32":"0xe602df05cc75712490294c6c104ab7c17f4030363910a7a2626411c6d3118847"},{"signature":"ERC20InvalidReceiver(address)","signatureHash4":"0xec442f05","signatureHash32":"0xec442f055133b72f3b2f9f0bb351c406b178527de2040a7d1feb4e058771f613"},{"signature":"ERC20InvalidSender(address)","signatureHash4":"0x96c6fd1e","signatureHash32":"0x96c6fd1edd0cd6ef7ff0ecc0facdf53148dc0048b57fe58af65755250a7a96bd"},{"signature":"ERC20InvalidSpender(address)","signatureHash4":"0x94280d62","signatureHash32":"0x94280d62c347d8d9f4d59a76ea321452406db88df38e0c9da304f58b57b373a2"},{"signature":"OwnableInvalidOwner(address)","signatureHash4":"0x1e4fbdf7","signatureHash32":"0x1e4fbdf7f3ef8bcaa855599e3abf48b232380f183f08f6f813d9ffa5bd585188"},{"signature":"OwnableUnauthorizedAccount(address)","signatureHash4":"0x118cdaa7","signatureHash32":"0x118cdaa7a341953d1887a2245fd6665d741c67c8c50581daa59e1d03373fa188"}]},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"match":"exact_match","chainId":"56","address":"0x2c3a8Ee94dDD97244a93Bc48298f97d2C412F7Db"}