0x60c06040523480156200001157600080fd5b5060405162001e7d38038062001e7d833981016040819052620000349162000069565b6001600160401b039182166080521660a052620000a1565b80516001600160401b03811681146200006457600080fd5b919050565b600080604083850312156200007d57600080fd5b62000088836200004c565b915062000098602084016200004c565b90509250929050565b60805160a051611da8620000d5600039600081816102210152610ae001526000818161010901526107e80152611da86000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639f6197b71161008c578063e074bb4711610066578063e074bb4714610269578063f0c56eed1461027c578063f20311f01461028f578063fd6bf387146102a257600080fd5b80639f6197b71461021c578063c579d49014610243578063cb8076391461025657600080fd5b806341c0e1b5116100c857806341c0e1b51461015c5780637210cf961461016457806385d63353146101845780638cedca71146101dc57600080fd5b80632fc044de146100ef578063369465a1146101045780633d391f7014610149575b600080fd5b6101026100fd366004611838565b6102b5565b005b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b61010261015736600461188d565b6103cf565b6101026106da565b61017761017236600461199a565b6107c4565b6040516101409190611b3f565b6101ab7f1cff79cde515a86f6cc1adbebe8ae25888905561371faf11c8102211f56b487081565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610140565b6101f773ccf3d848e08b94478ed8f46ffead3008faf581fd81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610140565b61012b7f000000000000000000000000000000000000000000000000000000000000000081565b610102610251366004611b52565b610939565b61017761026436600461199a565b610abc565b61010261027736600461188d565b610c1f565b61010261028a366004611bab565b610d34565b61010261029d366004611bef565b6110e8565b6101026102b0366004611838565b611281565b6040517fe33cace600000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152731612fc28ee0ab882ec99842cde0fc77ff0691e909063e33cace690602401600060405180830381600087803b15801561032057600080fd5b505af1158015610334573d6000803e3d6000fd5b505050508063ffffffff166000146103cb576040517fe33cace600000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152731612fc28ee0ab882ec99842cde0fc77ff0691e909063e33cace6906024015b600060405180830381600087803b1580156103b257600080fd5b505af11580156103c6573d6000803e3d6000fd5b505050505b5050565b60003073ffffffffffffffffffffffffffffffffffffffff1663bf7e214f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561041c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104409190611c0b565b90508073ffffffffffffffffffffffffffffffffffffffff811661056657735a15566417e6c1c9546523066500bddbc53f88c773ffffffffffffffffffffffffffffffffffffffff166365688cc96040518163ffffffff1660e01b81526004016020604051808303816000875af11580156104bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e39190611c0b565b6040517f7a9e5e4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201529091503090637a9e5e4b90602401600060405180830381600087803b15801561054d57600080fd5b505af1158015610561573d6000803e3d6000fd5b505050505b6040517fb700961300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301523060248301527f1cff79cd00000000000000000000000000000000000000000000000000000000604483015282169063b700961390606401602060405180830381865afa1580156105fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106229190611c28565b6106d5576040517fcbeea68c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301523060248301527f1cff79cd00000000000000000000000000000000000000000000000000000000604483015282169063cbeea68c906064015b600060405180830381600087803b1580156106bc57600080fd5b505af11580156106d0573d6000803e3d6000fd5b505050505b505050565b3373ffffffffffffffffffffffffffffffffffffffff1673ccf3d848e08b94478ed8f46ffead3008faf581fd73ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610750573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107749190611c0b565b73ffffffffffffffffffffffffffffffffffffffff16146107c1576040517fa6c827a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b6040805160808082018352606082840181905280830181905267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168352600160208085018290528751865173ffffffffffffffffffffffffffffffffffffffff8916928101929092526fffffffffffffffffffffffffffffffff16818701528083018290528551808203909301835292830181815260c0840190955292939092909160a0015b60608152602001906001900390816108735750506040830181905280518291906000906108a2576108a2611c45565b60209081029190910101526040805160028082526060820190925290816020016020820280368337505050606083018190528051600191906000906108e9576108e9611c45565b60200260200101818152505083606001516fffffffffffffffffffffffffffffffff1660001b826060015160018151811061092657610926611c45565b6020026020010181815250505092915050565b3373ffffffffffffffffffffffffffffffffffffffff1673ccf3d848e08b94478ed8f46ffead3008faf581fd73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d39190611c0b565b73ffffffffffffffffffffffffffffffffffffffff1614610a20576040517f19494c8a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff84161415610a9b5760405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015610a95573d6000803e3d6000fd5b50505050565b6106d573ffffffffffffffffffffffffffffffffffffffff84168383611368565b6040805160808082018352606082840181905280830181905267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001683526001602080850182905287810151865173ffffffffffffffffffffffffffffffffffffffff8916928101929092526fffffffffffffffffffffffffffffffff16818701526000818401528551808203909301835292830181815260c0840190955292939092909160a0015b6060815260200190600190039081610b6d575050604083018190528051829190600090610b9c57610b9c611c45565b60209081029190910101526040805160028082526060820190925290816020016020820280368337505050606083018190528051600091908290610be257610be2611c45565b60200260200101818152505083604001516fffffffffffffffffffffffffffffffff1660001b826060015160018151811061092657610926611c45565b60003073ffffffffffffffffffffffffffffffffffffffff1663bf7e214f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c909190611c0b565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb1575050565b6040517f2bc3217d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301523060248301527f1cff79cd000000000000000000000000000000000000000000000000000000006044830152829190821690632bc3217d906064016106a2565b6000610d4e610d4836849003840184611c74565b306107c4565b6040517ff14283c2000000000000000000000000000000000000000000000000000000008152909150731612fc28ee0ab882ec99842cde0fc77ff0691e909063f14283c290610da39087908590600401611c90565b600060405180830381600087803b158015610dbd57600080fd5b505af1158015610dd1573d6000803e3d6000fd5b50506040517f3fb387bd00000000000000000000000000000000000000000000000000000000815263ffffffff87166004820152731612fc28ee0ab882ec99842cde0fc77ff0691e909250633fb387bd9150602401600060405180830381600087803b158015610e4057600080fd5b505af1158015610e54573d6000803e3d6000fd5b50610e699250505060a0830160808401611caf565b1561105357610e85610e8036849003840184611c74565b6113f5565b6000610e9f610e9936859003850185611c74565b30610abc565b905063ffffffff8416610f45576040517f3ab9a078000000000000000000000000000000000000000000000000000000008152731612fc28ee0ab882ec99842cde0fc77ff0691e9090633ab9a07890610efc908490600401611b3f565b6020604051808303816000875af1158015610f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3f9190611ccc565b5061104d565b6040517ff14283c2000000000000000000000000000000000000000000000000000000008152731612fc28ee0ab882ec99842cde0fc77ff0691e909063f14283c290610f979087908590600401611c90565b600060405180830381600087803b158015610fb157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b50506040517f3fb387bd00000000000000000000000000000000000000000000000000000000815263ffffffff87166004820152731612fc28ee0ab882ec99842cde0fc77ff0691e909250633fb387bd9150602401600060405180830381600087803b15801561103457600080fd5b505af1158015611048573d6000803e3d6000fd5b505050505b50610a95565b63ffffffff831615610a95576040517fe33cace600000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152731612fc28ee0ab882ec99842cde0fc77ff0691e909063e33cace690602401600060405180830381600087803b1580156110ca57600080fd5b505af11580156110de573d6000803e3d6000fd5b5050505050505050565b61110573149667b6fae2c63d1b4317c716b0d0e4d3e2bd706103cf565b6000611119610d4836849003840184611c74565b6040517f3ab9a078000000000000000000000000000000000000000000000000000000008152909150731612fc28ee0ab882ec99842cde0fc77ff0691e9090633ab9a0789061116c908490600401611b3f565b6020604051808303816000875af115801561118b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111af9190611ccc565b506111c060a0830160808401611caf565b156103cb576111d7610e8036849003840184611c74565b60006111eb610e9936859003850185611c74565b6040517f3ab9a078000000000000000000000000000000000000000000000000000000008152909150731612fc28ee0ab882ec99842cde0fc77ff0691e9090633ab9a0789061123e908490600401611b3f565b6020604051808303816000875af115801561125d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190611ccc565b6040517f3fb387bd00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152731612fc28ee0ab882ec99842cde0fc77ff0691e9090633fb387bd90602401600060405180830381600087803b1580156112ec57600080fd5b505af1158015611300573d6000803e3d6000fd5b505050508063ffffffff166000146103cb576040517f3fb387bd00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152731612fc28ee0ab882ec99842cde0fc77ff0691e9090633fb387bd90602401610398565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526106d59084906115bf565b80602001516fffffffffffffffffffffffffffffffff1681600001516fffffffffffffffffffffffffffffffff16111561148357805160208201516040517f866a0beb0000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9283166004820152911660248201526044015b60405180910390fd5b80606001516fffffffffffffffffffffffffffffffff1666b1a2bc2ec5000082602001516fffffffffffffffffffffffffffffffff166114c39190611d14565b101561152157602081015160608201516040517f25a5396b0000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff92831660048201529116602482015260440161147a565b80604001516fffffffffffffffffffffffffffffffff1666b1a2bc2ec5000082600001516fffffffffffffffffffffffffffffffff166115619190611d2b565b11156115bc57805160408083015190517f25a5396b0000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff92831660048201529116602482015260440161147a565b50565b6000611621826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116cb9092919063ffffffff16565b8051909150156106d5578080602001905181019061163f9190611c28565b6106d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161147a565b60606116da84846000856116e2565b949350505050565b60606116ed856117e6565b611723576040517f304619b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161174c9190611d43565b60006040518083038185875af1925050503d8060008114611789576040519150601f19603f3d011682016040523d82523d6000602084013e61178e565b606091505b509150915081156117a25791506116da9050565b8051156117b25780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a9190611d5f565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906116da575050151592915050565b803563ffffffff8116811461183357600080fd5b919050565b6000806040838503121561184b57600080fd5b6118548361181f565b91506118626020840161181f565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146115bc57600080fd5b60006020828403121561189f57600080fd5b81356118aa8161186b565b9392505050565b80356fffffffffffffffffffffffffffffffff8116811461183357600080fd5b80151581146115bc57600080fd5b600060a082840312156118f157600080fd5b60405160a0810181811067ffffffffffffffff8211171561193b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061194a836118b1565b8152611958602084016118b1565b6020820152611969604084016118b1565b604082015261197a606084016118b1565b6060820152608083013561198d816118d1565b6080919091015292915050565b60008060c083850312156119ad57600080fd5b6119b784846118df565b915060a08301356119c78161186b565b809150509250929050565b60005b838110156119ed5781810151838201526020016119d5565b83811115610a955750506000910152565b60008151808452611a168160208601602086016119d2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600081518084526020808501945080840160005b83811015611a7857815187529582019590820190600101611a5c565b509495945050505050565b60006080830167ffffffffffffffff835116845260208084015115158186015260408401516080604087015282815180855260a08801915060a08160051b8901019450838301925060005b81811015611b1a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60898703018352611b088685516119fe565b95509284019291840191600101611ace565b505050505060608301518482036060860152611b368282611a48565b95945050505050565b6020815260006118aa6020830184611a83565b600080600060608486031215611b6757600080fd5b8335611b728161186b565b92506020840135611b828161186b565b929592945050506040919091013590565b600060a08284031215611ba557600080fd5b50919050565b600080600060e08486031215611bc057600080fd5b611bc98461181f565b9250611bd76020850161181f565b9150611be68560408601611b93565b90509250925092565b600060a08284031215611c0157600080fd5b6118aa8383611b93565b600060208284031215611c1d57600080fd5b81516118aa8161186b565b600060208284031215611c3a57600080fd5b81516118aa816118d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a08284031215611c8657600080fd5b6118aa83836118df565b63ffffffff831681526040602082015260006116da6040830184611a83565b600060208284031215611cc157600080fd5b81356118aa816118d1565b600060208284031215611cde57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611d2657611d26611ce5565b500390565b60008219821115611d3e57611d3e611ce5565b500190565b60008251611d558184602087016119d2565b9190910192915050565b6020815260006118aa60208301846119fe56fea2646970667358221220e90197807ac04e764cbd235cac1ab25c54b25aa1feec2ec9538c9b4866a6b5d064736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000f