60806040523480156200001157600080fd5b50600280546001600160a01b031916339081179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360016003556004805460ff191690556040805180820190915260108082526f1551c815d9585c1bdb9cc814ddd9585d60821b60209092019182526200009a91600791620000cf565b50604080518082019091526004808252635547575360e01b6020909201918252620000c891600891620000cf565b50620001b1565b828054620000dd9062000175565b90600052602060002090601f0160209004810192826200010157600085556200014c565b82601f106200011c57805160ff19168380011785556200014c565b828001600101855582156200014c579182015b828111156200014c5782518255916020019190600101906200012f565b506200015a9291506200015e565b5090565b5b808211156200015a57600081556001016200015f565b600181811c908216806200018a57607f821691505b602082108103620001ab57634e487b7160e01b600052602260045260246000fd5b50919050565b61235080620001c16000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806392ab723e116100b8578063e985e9c51161007c578063e985e9c514610296578063eaec5f81146102a9578063f242432a146102bc578063f2fde38b146102cf578063f5298aca146102e2578063f6eb127a146102f557600080fd5b806392ab723e1461022d57806395d89b4114610240578063a22cb46514610248578063b48ab8b61461025b578063db90e83c1461026e57600080fd5b80634e1273f4116100ff5780634e1273f4146101c15780635c975abb146101e157806370480275146101ec578063731133e9146101ff5780638da5cb5b1461021257600080fd5b8062fdd58e1461013b57806301ffc9a71461016157806306fdde03146101845780631785f53c146101995780632eb2c2d6146101ae575b600080fd5b61014e610149366004611958565b610308565b6040519081526020015b60405180910390f35b61017461016f36600461199b565b610352565b6040519015158152602001610158565b61018c61038d565b6040516101589190611a05565b6101ac6101a7366004611a18565b61041f565b005b6101ac6101bc366004611b79565b610473565b6101d46101cf366004611c23565b61053b565b6040516101589190611d1e565b60045460ff16610174565b6101ac6101fa366004611a18565b61079f565b6101ac61020d366004611d31565b6107ed565b6002546040516001600160a01b039091168152602001610158565b61014e61023b366004611d92565b61082e565b61018c610862565b6101ac610256366004611dab565b610871565b6101ac610269366004611de7565b6108dd565b61028161027c366004611d92565b610918565b60408051928352602083019190915201610158565b6101746102a4366004611e74565b610952565b61014e6102b7366004611ea7565b610980565b6101ac6102ca366004611ec9565b6109ae565b6101ac6102dd366004611a18565b610aad565b6101ac6102f0366004611f2e565b610b9c565b6101ac610303366004611f61565b610c05565b600080600061031684610918565b6001600160a01b03871660009081526020818152604080832085845290915290205491935091506103479082610980565b925050505b92915050565b6000631324c2ed60e11b6001600160e01b031983160161037457506001919050565b6301ffc9a760e01b6001600160e01b031983161461034c565b60606007805461039c90611fd5565b80601f01602080910402602001604051908101604052809291908181526020018280546103c890611fd5565b80156104155780601f106103ea57610100808354040283529160200191610415565b820191906000526020600020905b8154815290600101906020018083116103f857829003601f168201915b5050505050905090565b6002546001600160a01b031633146104525760405162461bcd60e51b81526004016104499061200f565b60405180910390fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b336001600160a01b038616148061048f575061048f8533610952565b6104cf5760405162461bcd60e51b81526020600482015260116024820152701024a72b20a624a22fa7a822a920aa27a960791b6044820152606401610449565b6001600160a01b03841661051a5760405162461bcd60e51b8152602060048201526012602482015271081253959053125117d49150d2541251539560721b6044820152606401610449565b61052685858585610c3f565b610534858585855a86610fc6565b5050505050565b815181516060919081146105895760405162461bcd60e51b8152602060048201526015602482015274040929cac82989288be82a4a482b2be988a9c8ea89605b1b6044820152606401610449565b6000806105af856000815181106105a2576105a2612055565b6020026020010151610918565b915091506000806000886000815181106105cb576105cb612055565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000848152602001908152602001600020549050600083905060008567ffffffffffffffff81111561062757610627611a33565b604051908082528060200260200182016040528015610650578160200160208202803683370190505b50905061065d8385610980565b8160008151811061067057610670612055565b602090810291909101015260015b868110156107925761069b8982815181106105a2576105a2612055565b909650945082861415806106ff57508981815181106106bc576106bc612055565b60200260200101516001600160a01b03168a6001836106db9190612081565b815181106106eb576106eb612055565b60200260200101516001600160a01b031614155b15610759576000808b838151811061071957610719612055565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008781526020019081526020016000205493508592505b6107638486610980565b82828151811061077557610775612055565b60209081029190910101528061078a81612098565b91505061067e565b5098975050505050505050565b6002546001600160a01b031633146107c95760405162461bcd60e51b81526004016104499061200f565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b3360009081526006602052604090205460ff1661081c576040516282b42960e81b815260040160405180910390fd5b610828848484846110c4565b50505050565b600080600061083c84610918565b600082815260056020526040902054919350915061085a9082610980565b949350505050565b60606008805461039c90611fd5565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3360009081526006602052604090205460ff1661090c576040516282b42960e81b815260040160405180910390fd5b61082884848484611168565b60008061092860206101006120c7565b61093290846120c7565b915061094160206101006120c7565b61094b90846120db565b9050915091565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6000806109936001640100000000612081565b905060006109a28460206120ef565b9490941c169392505050565b336001600160a01b03861614806109ca57506109ca8533610952565b610a0a5760405162461bcd60e51b81526020600482015260116024820152701024a72b20a624a22fa7a822a920aa27a960791b6044820152606401610449565b6001600160a01b038416610a555760405162461bcd60e51b8152602060048201526012602482015271081253959053125117d49150d2541251539560721b6044820152606401610449565b603883148015610a7557503360009081526006602052604090205460ff16155b15610a935760405163149fb7af60e01b815260040160405180910390fd5b610a9f85858585611376565b610534858585855a866113e2565b6002546001600160a01b03163314610ad75760405162461bcd60e51b81526004016104499061200f565b6001600160a01b038116610b405760405162461bcd60e51b815260206004820152602a60248201527f4f776e61626c65237472616e736665724f776e6572736869703a20494e56414c60448201526949445f4144445245535360b01b6064820152608401610449565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526006602052604090205460ff16610bcb576040516282b42960e81b815260040160405180910390fd5b80610bd68484610308565b1015610bf557604051631e9acf1760e31b815260040160405180910390fd5b610c008383836114d6565b505050565b3360009081526006602052604090205460ff16610c34576040516282b42960e81b815260040160405180910390fd5b610c00838383611567565b815181518114610c895760405162461bcd60e51b81526020600482015260156024820152740929cac82989288be82a4a482b2a6be988a9c8ea89605b1b6044820152606401610449565b836001600160a01b0316856001600160a01b031614158015610cab5750600081115b15610ed157600080610cc9856000815181106105a2576105a2612055565b6001600160a01b038916600090815260208181526040808320858452909152812054875193955091935091610d1a9190849088908590610d0b57610d0b612055565b602002602001015160016116ac565b6001600160a01b03881660009081526020818152604080832087845290915281205487519293509091610d699190859089908590610d5a57610d5a612055565b602002602001015160006116ac565b90508360015b86811015610e8c57603860ff16898281518110610d8e57610d8e612055565b6020026020010151148015610db357503360009081526006602052604090205460ff16155b15610dd15760405163149fb7af60e01b815260040160405180910390fd5b610de68982815181106105a2576105a2612055565b9096509450818614610e48576001600160a01b038b811660009081526020818152604080832086845280835281842098909855928d16825281815282822094825284815282822095909555878152948452808520549290935291909220549084905b610e5f84868a8481518110610d0b57610d0b612055565b9350610e7883868a8481518110610d5a57610d5a612055565b925080610e8481612098565b915050610d6f565b50506001600160a01b03808a16600090815260208181526040808320888452825280832095909555918a16815280825283812095815294905292209190915550610f68565b60005b81811015610f6657828181518110610eee57610eee612055565b6020026020010151610f1987868481518110610f0c57610f0c612055565b6020026020010151610308565b1015610f545760405162461bcd60e51b815260206004820152600a60248201526920554e444552464c4f5760b01b6044820152606401610449565b80610f5e81612098565b915050610ed4565b505b836001600160a01b0316856001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610fb792919061210e565b60405180910390a45050505050565b610fd8856001600160a01b0316611895565b156110bc576000856001600160a01b031663bc197c8184338a8989886040518763ffffffff1660e01b815260040161101495949392919061213c565b60206040518083038160008887f1158015611033573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611058919061219a565b90506001600160e01b0319811663bc197c8160e01b146110ba5760405162461bcd60e51b815260206004820152601b60248201527f20494e56414c49445f4f4e5f524543454956455f4d45535341474500000000006044820152606401610449565b505b505050505050565b6110d184848460006118cf565b6000806110dd85610918565b915091506111016005600084815260200190815260200160002054828660006116ac565b60008381526005602090815260408083209390935582518881529081018790526001600160a01b0389169233917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46110bc60008787875a886113e2565b815183511461118a5760405163019d1e2360e01b815260040160405180910390fd5b82511561130f576000806111aa856000815181106105a2576105a2612055565b6001600160a01b0388166000908152602081815260408083208584529091528120548751939550919350916111ec9190849088908590610d5a57610d5a612055565b9050600061121b60056000868152602001908152602001600020548488600081518110610d5a57610d5a612055565b87519091508460015b828110156112d8576112418a82815181106105a2576105a2612055565b9097509550818714611294576001600160a01b038b166000908152602081815260408083208584528252808320979097558882528682205493825260059052858120949094558684529390922054919285905b6112ab85878b8481518110610d5a57610d5a612055565b94506112c484878b8481518110610d5a57610d5a612055565b9350806112d081612098565b915050611224565b5050506001600160a01b03881660009081526020818152604080832096835295815285822093909355600590925292902091909155505b836001600160a01b031660006001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161135f92919061210e565b60405180910390a461082860008585855a86610fc6565b61138384838360016118cf565b61139083838360006118cf565b60408051838152602081018390526001600160a01b03808616929087169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6113f4856001600160a01b0316611895565b156110bc576000856001600160a01b031663f23a6e6184338a8989886040518763ffffffff1660e01b81526004016114309594939291906121b7565b60206040518083038160008887f115801561144f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611474919061219a565b90506001600160e01b0319811663f23a6e6160e01b146110ba5760405162461bcd60e51b815260206004820152601b60248201527f20494e56414c49445f4f4e5f524543454956455f4d45535341474500000000006044820152606401610449565b6114e383838360016118cf565b6000806114ef84610918565b600082815260056020526040902054919350915061151090828560016116ac565b600083815260056020908152604080832093909355825187815290810186905290916001600160a01b0388169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101610fb7565b81518151811461158a5760405163019d1e2360e01b815260040160405180910390fd5b60005b8181101561165b576000806115ad8684815181106105a2576105a2612055565b6001600160a01b03891660009081526020818152604080832085845290915290205487519294509092506115ef918390889087908110610d0b57610d0b612055565b6001600160a01b038816600090815260208181526040808320868452825280832093909355600590522054855161163591908390889087908110610d0b57610d0b612055565b60009283526005602052604090922091909155508061165381612098565b91505061158d565b5060006001600160a01b0316846001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516113d492919061210e565b6000806116ba8560206120ef565b905060006116ce6001640100000000612081565b905060008460018111156116e4576116e46121fc565b0361178a576116f585831b88612212565b9250868310156117335760405162461bcd60e51b8152602060048201526009602482015268204f564552464c4f5760b81b6044820152606401610449565b61173f6020600261230e565b61174d8689851c8416612212565b106117855760405162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b6044820152606401610449565b61188b565b600184600181111561179e5761179e6121fc565b03611843576117af85831b88612081565b9250868311156117ee5760405162461bcd60e51b815260206004820152600a60248201526920554e444552464c4f5760b01b6044820152606401610449565b84818389901c1610156117855760405162461bcd60e51b815260206004820152601960248201527f766965775570647442696e56616c3a20554e444552464c4f57000000000000006044820152606401610449565b60405162461bcd60e51b815260206004820152601960248201527f766965775570647442563a20494e56414c49445f5752495445000000000000006044820152606401610449565b5050949350505050565b6000813f80158015906118c857507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b6000806118db85610918565b6001600160a01b038816600090815260208181526040808320858452909152902054919350915061190e908286866116ac565b6001600160a01b03909616600090815260208181526040808320948352939052919091209490945550505050565b80356001600160a01b038116811461195357600080fd5b919050565b6000806040838503121561196b57600080fd5b6119748361193c565b946020939093013593505050565b6001600160e01b03198116811461199857600080fd5b50565b6000602082840312156119ad57600080fd5b81356118c881611982565b6000815180845260005b818110156119de576020818501810151868301820152016119c2565b818111156119f0576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006118c860208301846119b8565b600060208284031215611a2a57600080fd5b6118c88261193c565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a7257611a72611a33565b604052919050565b600067ffffffffffffffff821115611a9457611a94611a33565b5060051b60200190565b600082601f830112611aaf57600080fd5b81356020611ac4611abf83611a7a565b611a49565b82815260059290921b84018101918181019086841115611ae357600080fd5b8286015b84811015611afe5780358352918301918301611ae7565b509695505050505050565b600082601f830112611b1a57600080fd5b813567ffffffffffffffff811115611b3457611b34611a33565b611b47601f8201601f1916602001611a49565b818152846020838601011115611b5c57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611b9157600080fd5b611b9a8661193c565b9450611ba86020870161193c565b9350604086013567ffffffffffffffff80821115611bc557600080fd5b611bd189838a01611a9e565b94506060880135915080821115611be757600080fd5b611bf389838a01611a9e565b93506080880135915080821115611c0957600080fd5b50611c1688828901611b09565b9150509295509295909350565b60008060408385031215611c3657600080fd5b823567ffffffffffffffff80821115611c4e57600080fd5b818501915085601f830112611c6257600080fd5b81356020611c72611abf83611a7a565b82815260059290921b84018101918181019089841115611c9157600080fd5b948201945b83861015611cb657611ca78661193c565b82529482019490820190611c96565b96505086013592505080821115611ccc57600080fd5b50611cd985828601611a9e565b9150509250929050565b600081518084526020808501945080840160005b83811015611d1357815187529582019590820190600101611cf7565b509495945050505050565b6020815260006118c86020830184611ce3565b60008060008060808587031215611d4757600080fd5b611d508561193c565b93506020850135925060408501359150606085013567ffffffffffffffff811115611d7a57600080fd5b611d8687828801611b09565b91505092959194509250565b600060208284031215611da457600080fd5b5035919050565b60008060408385031215611dbe57600080fd5b611dc78361193c565b915060208301358015158114611ddc57600080fd5b809150509250929050565b60008060008060808587031215611dfd57600080fd5b611e068561193c565b9350602085013567ffffffffffffffff80821115611e2357600080fd5b611e2f88838901611a9e565b94506040870135915080821115611e4557600080fd5b611e5188838901611a9e565b93506060870135915080821115611e6757600080fd5b50611d8687828801611b09565b60008060408385031215611e8757600080fd5b611e908361193c565b9150611e9e6020840161193c565b90509250929050565b60008060408385031215611eba57600080fd5b50508035926020909101359150565b600080600080600060a08688031215611ee157600080fd5b611eea8661193c565b9450611ef86020870161193c565b93506040860135925060608601359150608086013567ffffffffffffffff811115611f2257600080fd5b611c1688828901611b09565b600080600060608486031215611f4357600080fd5b611f4c8461193c565b95602085013595506040909401359392505050565b600080600060608486031215611f7657600080fd5b611f7f8461193c565b9250602084013567ffffffffffffffff80821115611f9c57600080fd5b611fa887838801611a9e565b93506040860135915080821115611fbe57600080fd5b50611fcb86828701611a9e565b9150509250925092565b600181811c90821680611fe957607f821691505b60208210810361200957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526026908201527f4f776e61626c65236f6e6c794f776e65723a2053454e4445525f49535f4e4f546040820152652fa7aba722a960d11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156120935761209361206b565b500390565b6000600182016120aa576120aa61206b565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826120d6576120d66120b1565b500490565b6000826120ea576120ea6120b1565b500690565b60008160001904831182151516156121095761210961206b565b500290565b6040815260006121216040830185611ce3565b82810360208401526121338185611ce3565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061216890830186611ce3565b828103606084015261217a8186611ce3565b9050828103608084015261218e81856119b8565b98975050505050505050565b6000602082840312156121ac57600080fd5b81516118c881611982565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906121f1908301846119b8565b979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600082198211156122255761222561206b565b500190565b600181815b8085111561226557816000190482111561224b5761224b61206b565b8085161561225857918102915b93841c939080029061222f565b509250929050565b60008261227c5750600161034c565b816122895750600061034c565b816001811461229f57600281146122a9576122c5565b600191505061034c565b60ff8411156122ba576122ba61206b565b50506001821b61034c565b5060208310610133831016604e8410600b84101617156122e8575081810a61034c565b6122f2838361222a565b80600019048211156123065761230661206b565b029392505050565b60006118c8838361226d56fea2646970667358221220b49209e033cbc9a683daa9d4eb458013aa15a5faa8bf1add317c8eb03e6b956764736f6c634300080d0033