60806040526000600b60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051620047b2380380620047b28339818101604052810190620000529190620002e5565b60405180606001604052806022815260200162004790602291396040518060400160405280600481526020017f504d524300000000000000000000000000000000000000000000000000000000815250620000c2620000b66200014d60201b60201c565b6200015560201b60201c565b8160039080519060200190620000da9291906200021e565b508060049080519060200190620000f39291906200021e565b50620001046200021960201b60201c565b60018190555050506000600960006101000a81548160ff0219169083151502179055506001600a8190555082600c8190555081600d8190555080600e81905550505050620003cf565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b8280546200022c906200034b565b90600052602060002090601f0160209004810192826200025057600085556200029c565b82601f106200026b57805160ff19168380011785556200029c565b828001600101855582156200029c579182015b828111156200029b5782518255916020019190600101906200027e565b5b509050620002ab9190620002af565b5090565b5b80821115620002ca576000816000905550600101620002b0565b5090565b600081519050620002df81620003b5565b92915050565b600080600060608486031215620003015762000300620003b0565b5b60006200031186828701620002ce565b93505060206200032486828701620002ce565b92505060406200033786828701620002ce565b9150509250925092565b6000819050919050565b600060028204905060018216806200036457607f821691505b602082108114156200037b576200037a62000381565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620003c08162000341565b8114620003cc57600080fd5b50565b6143b180620003df6000396000f3fe6080604052600436106102255760003560e01c80638456cb5911610123578063aca8ffe7116100ab578063c87b56dd1161006f578063c87b56dd1461075f578063d63dd7011461079c578063e985e9c5146107b8578063f2fde38b146107f5578063fbe1aa511461081e57610225565b8063aca8ffe7146106a5578063b88d4fde146106ce578063c032846b146106ea578063c0dfc1e91461071a578063c7fcca6f1461073657610225565b8063a125c824116100f2578063a125c824146105e3578063a22cb4651461060c578063a3fd2c4414610635578063abb1dc4414610662578063ac4460021461068e57610225565b80638456cb591461054a5780638da5cb5b1461056157806395d89b411461058c578063968ed600146105b757610225565b806342842e0e116101b15780635c975abb116101755780635c975abb146104615780636352211e1461048c578063656cf918146104c957806370a08231146104f6578063715018a61461053357610225565b806342842e0e1461039d57806345c0f533146103b957806349a5980a146103e457806354214f691461040d57806355f804b31461043857610225565b806318160ddd116101f857806318160ddd146102eb57806323b872dd146103165780632913daa0146103325780633f4ba83a1461035d578063419041d81461037457610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906131f1565b610849565b60405161025e919061377d565b60405180910390f35b34801561027357600080fd5b5061027c6108db565b6040516102899190613798565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190613298565b61096d565b6040516102c69190613716565b60405180910390f35b6102e960048036038101906102e49190613184565b6109ec565b005b3480156102f757600080fd5b50610300610b30565b60405161030d9190613a13565b60405180910390f35b610330600480360381019061032b919061306e565b610b47565b005b34801561033e57600080fd5b50610347610e6c565b6040516103549190613a13565b60405180910390f35b34801561036957600080fd5b50610372610e72565b005b34801561038057600080fd5b5061039b600480360381019061039691906132c5565b610eb0565b005b6103b760048036038101906103b2919061306e565b610fbb565b005b3480156103c557600080fd5b506103ce610fdb565b6040516103db9190613a13565b60405180910390f35b3480156103f057600080fd5b5061040b600480360381019061040691906131c4565b610fe1565b005b34801561041957600080fd5b5061042261104c565b60405161042f919061377d565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a919061324b565b61105f565b005b34801561046d57600080fd5b506104766110b5565b604051610483919061377d565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190613298565b6110cc565b6040516104c09190613716565b60405180910390f35b3480156104d557600080fd5b506104de6110de565b6040516104ed93929190613a57565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190613001565b61112e565b60405161052a9190613a13565b60405180910390f35b34801561053f57600080fd5b506105486111e7565b005b34801561055657600080fd5b5061055f6111fb565b005b34801561056d57600080fd5b50610576611239565b6040516105839190613716565b60405180910390f35b34801561059857600080fd5b506105a1611262565b6040516105ae9190613798565b60405180910390f35b3480156105c357600080fd5b506105cc6112f4565b6040516105da929190613a2e565b60405180910390f35b3480156105ef57600080fd5b5061060a6004803603810190610605919061324b565b611303565b005b34801561061857600080fd5b50610633600480360381019061062e9190613144565b611359565b005b34801561064157600080fd5b5061064a611464565b60405161065993929190613a57565b60405180910390f35b34801561066e57600080fd5b506106776114b4565b6040516106859291906137ba565b60405180910390f35b34801561069a57600080fd5b506106a36115db565b005b3480156106b157600080fd5b506106cc60048036038101906106c79190613298565b611682565b005b6106e860048036038101906106e391906130c1565b6116cd565b005b3480156106f657600080fd5b506106ff611740565b60405161071196959493929190613a8e565b60405180910390f35b610734600480360381019061072f9190613318565b6117f1565b005b34801561074257600080fd5b5061075d600480360381019061075891906132c5565b611b40565b005b34801561076b57600080fd5b5061078660048036038101906107819190613298565b611c70565b6040516107939190613798565b60405180910390f35b6107b660048036038101906107b19190613318565b611d74565b005b3480156107c457600080fd5b506107df60048036038101906107da919061302e565b6120ae565b6040516107ec919061377d565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190613001565b612142565b005b34801561082a57600080fd5b506108336121c6565b6040516108409190613a13565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108a457506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d45750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600380546108ea90613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461091690613dc6565b80156109635780601f1061093857610100808354040283529160200191610963565b820191906000526020600020905b81548152906001019060200180831161094657829003601f168201915b5050505050905090565b6000610978826121cc565b6109ae576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f7826110cc565b90508073ffffffffffffffffffffffffffffffffffffffff16610a1861222b565b73ffffffffffffffffffffffffffffffffffffffff1614610a7b57610a4481610a3f61222b565b6120ae565b610a7a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610b3a612233565b6002546001540303905090565b6000610b5282612238565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bb9576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610bc584612306565b91509150610bdb8187610bd661222b565b61232d565b610c2757610bf086610beb61222b565b6120ae565b610c26576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610c8e576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c9b8686866001612371565b8015610ca657600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610d7485610d5088888761238b565b7c0200000000000000000000000000000000000000000000000000000000176123b3565b600560008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610dfc576000600185019050600060056000838152602001908152602001600020541415610dfa576001548114610df9578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610e6486868660016123de565b505050505050565b600d5481565b610e7a6123e4565b610e82612462565b7fd9c654b9fad81e7174caf7ab276eb9e0e5fe085d4db2e84e09c2702872053c2260405160405180910390a1565b610eb86123e4565b82601060000160006101000a81548163ffffffff021916908363ffffffff16021790555081601060000160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550806010600001600c6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507ffc1ecc6749c0ed1ffc33ac58e7b26230d1a035c9dae817bd6e38cfb24fa8644b601060000160009054906101000a900463ffffffff16601060000160049054906101000a900467ffffffffffffffff166010600001600c9054906101000a900467ffffffffffffffff16604051610fae93929190613a57565b60405180910390a1505050565b610fd6838383604051806020016040528060008152506116cd565b505050565b600c5481565b610fe96123e4565b80600b60006101000a81548160ff0219169083151502179055507fc55565c1dcceed7a236384f279af4f95930442d66962d8d245a73a1b85e3c9a1600b60009054906101000a900460ff16604051611041919061377d565b60405180910390a150565b600b60009054906101000a900460ff1681565b6110676123e4565b818160129190611078929190612e05565b507fec7aa76ee322bd9ff6b9f70d62a749a4bfadba7751d8b4bb089b22ff0ed09bd260126040516110a991906137f1565b60405180910390a15050565b6000600960009054906101000a900460ff16905090565b60006110d782612238565b9050919050565b60108060000160009054906101000a900463ffffffff16908060000160049054906101000a900467ffffffffffffffff169080600001600c9054906101000a900467ffffffffffffffff16905083565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611196576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111ef6123e4565b6111f960006124c5565b565b6112036123e4565b61120b612589565b7f1fc5ef8cb9c4971cacd5752d70095e59ecd2faaedd232b3e85bd8fdd9073095a60405160405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461127190613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461129d90613dc6565b80156112ea5780601f106112bf576101008083540402835291602001916112ea565b820191906000526020600020905b8154815290600101906020018083116112cd57829003601f168201915b5050505050905090565b60008047600f54915091509091565b61130b6123e4565b81816013919061131c929190612e05565b507fa36fff1c6478d9cebacb70685906c5f6340c1ef345712a19ad41a5fe7d2bcbee601360405161134d91906137f1565b60405180910390a15050565b806008600061136661222b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661141361222b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611458919061377d565b60405180910390a35050565b60118060000160009054906101000a900463ffffffff16908060000160049054906101000a900467ffffffffffffffff169080600001600c9054906101000a900467ffffffffffffffff16905083565b606080601260138180546114c790613dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546114f390613dc6565b80156115405780601f1061151557610100808354040283529160200191611540565b820191906000526020600020905b81548152906001019060200180831161152357829003601f168201915b5050505050915080805461155390613dc6565b80601f016020809104026020016040519081016040528092919081815260200182805461157f90613dc6565b80156115cc5780601f106115a1576101008083540402835291602001916115cc565b820191906000526020600020905b8154815290600101906020018083116115af57829003601f168201915b50505050509050915091509091565b6115e36123e4565b6002600a541415611629576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611620906139d3565b60405180910390fd5b6002600a819055503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611677573d6000803e3d6000fd5b506001600a81905550565b61168a6123e4565b80600c819055507fe20e127115d125ee9e5585a8fb1b88c761a79582a054e18d8997d22c147e9fa7600c546040516116c29190613a13565b60405180910390a150565b6116d8848484610b47565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461173a57611703848484846125ec565b611739576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b600080600080600080601060000160009054906101000a900463ffffffff16601060000160049054906101000a900467ffffffffffffffff166010600001600c9054906101000a900467ffffffffffffffff16601160000160009054906101000a900463ffffffff16601160000160049054906101000a900467ffffffffffffffff166011600001600c9054906101000a900467ffffffffffffffff16955095509550955095509550909192939495565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461185f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611856906139f3565b60405180910390fd5b6002600a5414156118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c906139d3565b60405180910390fd5b6002600a819055506000601060000160049054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506000601060000160009054906101000a900463ffffffff1663ffffffff16905060006010600001600c9054906101000a900467ffffffffffffffff1690506000831415611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e906139b3565b60405180910390fd5b600082141580156119685750814210155b6119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e90613933565b60405180910390fd5b600c548467ffffffffffffffff166119bd610b30565b6119c79190613bb8565b1115611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90613813565b60405180910390fd5b8067ffffffffffffffff1684611a24611a1f61274c565b612754565b611a2e9190613c0e565b67ffffffffffffffff161115611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a70906138f3565b60405180910390fd5b611a94611a8461274c565b8567ffffffffffffffff166127a1565b611abf611a9f61274c565b85611ab0611aab61274c565b612754565b611aba9190613c0e565b6127bf565b611add8467ffffffffffffffff1684611ad89190613c4c565b612875565b611ae561274c565b73ffffffffffffffffffffffffffffffffffffffff167f371f0f9c5c7bb591d0f296e39127584eede508133f32e126261d929e7a6d5a2785604051611b2a9190613aef565b60405180910390a25050506001600a8190555050565b611b486123e4565b6000601060000160006101000a81548163ffffffff021916908363ffffffff16021790555082601160000160006101000a81548163ffffffff021916908363ffffffff16021790555081601160000160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550806011600001600c6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f28c10a27f02a9ef2610984cf2908beac19c3ad1fe5a2e3bed3f7245a4b051b8f601160000160009054906101000a900463ffffffff16601160000160049054906101000a900467ffffffffffffffff166011600001600c9054906101000a900467ffffffffffffffff16604051611c6393929190613a57565b60405180910390a1505050565b6060600b60009054906101000a900460ff1615611c9757611c9082612916565b9050611d6f565b611c9f610b30565b821115611ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd890613993565b60405180910390fd5b60138054611cee90613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1a90613dc6565b8015611d675780601f10611d3c57610100808354040283529160200191611d67565b820191906000526020600020905b815481529060010190602001808311611d4a57829003601f168201915b505050505090505b919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd9906139f3565b60405180910390fd5b6002600a541415611e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1f906139d3565b60405180910390fd5b6002600a819055506000601160000160049054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506000601160000160009054906101000a900463ffffffff1663ffffffff16905060006011600001600c9054906101000a900467ffffffffffffffff1690506000831415611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190613873565b60405180910390fd5b60008214158015611eeb5750814210155b611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f21906138b3565b60405180910390fd5b600c548467ffffffffffffffff16611f40610b30565b611f4a9190613bb8565b1115611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290613893565b60405180910390fd5b8067ffffffffffffffff168467ffffffffffffffff16611fb1611fac61274c565b612754565b67ffffffffffffffff16611fcb611fc661274c565b6129b5565b611fd59190613ca6565b611fdf9190613bb8565b1115612020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201790613953565b60405180910390fd5b612034338567ffffffffffffffff166127a1565b6120528467ffffffffffffffff168461204d9190613c4c565b612875565b3373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885856040516120989190613aef565b60405180910390a25050506001600a8190555050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61214a6123e4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190613853565b60405180910390fd5b6121c3816124c5565b50565b600e5481565b6000816121d7612233565b111580156121e6575060015482105b8015612224575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b60008082905080612247612233565b116122cf576001548110156122ce5760006005600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821614156122cc575b60008114156122c2576005600083600190039350838152602001908152602001600020549050612297565b8092505050612301565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b612379612a0c565b61238584848484612a56565b50505050565b60008060e883901c905060e86123a2868684612a5c565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6123ec61274c565b73ffffffffffffffffffffffffffffffffffffffff1661240a611239565b73ffffffffffffffffffffffffffffffffffffffff1614612460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245790613973565b60405180910390fd5b565b61246a612a65565b6000600960006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6124ae61274c565b6040516124bb9190613716565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612591612a0c565b6001600960006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586125d561274c565b6040516125e29190613716565b60405180910390a1565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261261261222b565b8786866040518563ffffffff1660e01b81526004016126349493929190613731565b602060405180830381600087803b15801561264e57600080fd5b505af192505050801561267f57506040513d601f19601f8201168201806040525081019061267c919061321e565b60015b6126f9573d80600081146126af576040519150601f19603f3d011682016040523d82523d6000602084013e6126b4565b606091505b506000815114156126f1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b600033905090565b600060c0600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c9050919050565b6127bb828260405180602001604052806000815250612aae565b5050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600082905060c081901b77ffffffffffffffffffffffffffffffffffffffffffffffff831617915081600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b803410156128b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128af906138d3565b60405180910390fd5b80341115612913573373ffffffffffffffffffffffffffffffffffffffff166108fc82346128e69190613ca6565b9081150290604051600060405180830381858888f19350505050158015612911573d6000803e3d6000fd5b505b50565b6060612921826121cc565b612957576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612961612b4c565b905060008151141561298257604051806020016040528060008152506129ad565b8061298c84612bde565b60405160200161299d9291906136f2565b6040516020818303038152906040525b915050919050565b600067ffffffffffffffff6040600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b612a146110b5565b15612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b90613913565b60405180910390fd5b565b50505050565b60009392505050565b612a6d6110b5565b612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa390613833565b60405180910390fd5b565b612ab88383612c37565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612b475760006001549050600083820390505b612af960008683806001019450866125ec565b612b2f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612ae6578160015414612b4457600080fd5b50505b505050565b606060128054612b5b90613dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054612b8790613dc6565b8015612bd45780601f10612ba957610100808354040283529160200191612bd4565b820191906000526020600020905b815481529060010190602001808311612bb757829003601f168201915b5050505050905090565b606060a060405101806040526020810391506000825281835b600115612c2257600184039350600a81066030018453600a8104905080612c1d57612c22565b612bf7565b50828103602084039350808452505050919050565b600060015490506000821415612c79576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c866000848385612371565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612cfd83612cee600086600061238b565b612cf785612df5565b176123b3565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612d9e57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612d63565b506000821415612dda576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612df060008483856123de565b505050565b60006001821460e11b9050919050565b828054612e1190613dc6565b90600052602060002090601f016020900481019282612e335760008555612e7a565b82601f10612e4c57803560ff1916838001178555612e7a565b82800160010185558215612e7a579182015b82811115612e79578235825591602001919060010190612e5e565b5b509050612e879190612e8b565b5090565b5b80821115612ea4576000816000905550600101612e8c565b5090565b6000612ebb612eb684613b2f565b613b0a565b905082815260208101848484011115612ed757612ed6613ec5565b5b612ee2848285613d84565b509392505050565b600081359050612ef9816142f1565b92915050565b600081359050612f0e81614308565b92915050565b600081359050612f238161431f565b92915050565b600081519050612f388161431f565b92915050565b600082601f830112612f5357612f52613ebb565b5b8135612f63848260208601612ea8565b91505092915050565b60008083601f840112612f8257612f81613ebb565b5b8235905067ffffffffffffffff811115612f9f57612f9e613eb6565b5b602083019150836001820283011115612fbb57612fba613ec0565b5b9250929050565b600081359050612fd181614336565b92915050565b600081359050612fe68161434d565b92915050565b600081359050612ffb81614364565b92915050565b60006020828403121561301757613016613ecf565b5b600061302584828501612eea565b91505092915050565b6000806040838503121561304557613044613ecf565b5b600061305385828601612eea565b925050602061306485828601612eea565b9150509250929050565b60008060006060848603121561308757613086613ecf565b5b600061309586828701612eea565b93505060206130a686828701612eea565b92505060406130b786828701612fc2565b9150509250925092565b600080600080608085870312156130db576130da613ecf565b5b60006130e987828801612eea565b94505060206130fa87828801612eea565b935050604061310b87828801612fc2565b925050606085013567ffffffffffffffff81111561312c5761312b613eca565b5b61313887828801612f3e565b91505092959194509250565b6000806040838503121561315b5761315a613ecf565b5b600061316985828601612eea565b925050602061317a85828601612eff565b9150509250929050565b6000806040838503121561319b5761319a613ecf565b5b60006131a985828601612eea565b92505060206131ba85828601612fc2565b9150509250929050565b6000602082840312156131da576131d9613ecf565b5b60006131e884828501612eff565b91505092915050565b60006020828403121561320757613206613ecf565b5b600061321584828501612f14565b91505092915050565b60006020828403121561323457613233613ecf565b5b600061324284828501612f29565b91505092915050565b6000806020838503121561326257613261613ecf565b5b600083013567ffffffffffffffff8111156132805761327f613eca565b5b61328c85828601612f6c565b92509250509250929050565b6000602082840312156132ae576132ad613ecf565b5b60006132bc84828501612fc2565b91505092915050565b6000806000606084860312156132de576132dd613ecf565b5b60006132ec86828701612fd7565b93505060206132fd86828701612fec565b925050604061330e86828701612fec565b9150509250925092565b60006020828403121561332e5761332d613ecf565b5b600061333c84828501612fec565b91505092915050565b61334e81613cda565b82525050565b61335d81613cec565b82525050565b600061336e82613b75565b6133788185613b8b565b9350613388818560208601613d93565b61339181613ed4565b840191505092915050565b60006133a782613b80565b6133b18185613b9c565b93506133c1818560208601613d93565b6133ca81613ed4565b840191505092915050565b60006133e082613b80565b6133ea8185613bad565b93506133fa818560208601613d93565b80840191505092915050565b6000815461341381613dc6565b61341d8186613b9c565b94506001821660008114613438576001811461344a5761347d565b60ff198316865260208601935061347d565b61345385613b60565b60005b8381101561347557815481890152600182019150602081019050613456565b808801955050505b50505092915050565b6000613493602283613b9c565b915061349e82613ee5565b604082019050919050565b60006134b6601483613b9c565b91506134c182613f34565b602082019050919050565b60006134d9602683613b9c565b91506134e482613f5d565b604082019050919050565b60006134fc602e83613b9c565b915061350782613fac565b604082019050919050565b600061351f602383613b9c565b915061352a82613ffb565b604082019050919050565b6000613542602d83613b9c565b915061354d8261404a565b604082019050919050565b6000613565601583613b9c565b915061357082614099565b602082019050919050565b6000613588602783613b9c565b9150613593826140c2565b604082019050919050565b60006135ab601083613b9c565b91506135b682614111565b602082019050919050565b60006135ce603083613b9c565b91506135d98261413a565b604082019050919050565b60006135f1602783613b9c565b91506135fc82614189565b604082019050919050565b6000613614602083613b9c565b915061361f826141d8565b602082019050919050565b6000613637600f83613b9c565b915061364282614201565b602082019050919050565b600061365a603083613b9c565b91506136658261422a565b604082019050919050565b600061367d601f83613b9c565b915061368882614279565b602082019050919050565b60006136a0602e83613b9c565b91506136ab826142a2565b604082019050919050565b6136bf81613d44565b82525050565b6136ce81613d4e565b82525050565b6136dd81613d72565b82525050565b6136ec81613d5e565b82525050565b60006136fe82856133d5565b915061370a82846133d5565b91508190509392505050565b600060208201905061372b6000830184613345565b92915050565b60006080820190506137466000830187613345565b6137536020830186613345565b61376060408301856136b6565b81810360608301526137728184613363565b905095945050505050565b60006020820190506137926000830184613354565b92915050565b600060208201905081810360008301526137b2818461339c565b905092915050565b600060408201905081810360008301526137d4818561339c565b905081810360208301526137e8818461339c565b90509392505050565b6000602082019050818103600083015261380b8184613406565b905092915050565b6000602082019050818103600083015261382c81613486565b9050919050565b6000602082019050818103600083015261384c816134a9565b9050919050565b6000602082019050818103600083015261386c816134cc565b9050919050565b6000602082019050818103600083015261388c816134ef565b9050919050565b600060208201905081810360008301526138ac81613512565b9050919050565b600060208201905081810360008301526138cc81613535565b9050919050565b600060208201905081810360008301526138ec81613558565b9050919050565b6000602082019050818103600083015261390c8161357b565b9050919050565b6000602082019050818103600083015261392c8161359e565b9050919050565b6000602082019050818103600083015261394c816135c1565b9050919050565b6000602082019050818103600083015261396c816135e4565b9050919050565b6000602082019050818103600083015261398c81613607565b9050919050565b600060208201905081810360008301526139ac8161362a565b9050919050565b600060208201905081810360008301526139cc8161364d565b9050919050565b600060208201905081810360008301526139ec81613670565b9050919050565b60006020820190508181036000830152613a0c81613693565b9050919050565b6000602082019050613a2860008301846136b6565b92915050565b6000604082019050613a4360008301856136b6565b613a5060208301846136b6565b9392505050565b6000606082019050613a6c60008301866136c5565b613a7960208301856136e3565b613a8660408301846136e3565b949350505050565b600060c082019050613aa360008301896136c5565b613ab060208301886136e3565b613abd60408301876136e3565b613aca60608301866136c5565b613ad760808301856136e3565b613ae460a08301846136e3565b979650505050505050565b6000602082019050613b0460008301846136d4565b92915050565b6000613b14613b25565b9050613b208282613df8565b919050565b6000604051905090565b600067ffffffffffffffff821115613b4a57613b49613e87565b5b613b5382613ed4565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613bc382613d44565b9150613bce83613d44565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c0357613c02613e29565b5b828201905092915050565b6000613c1982613d5e565b9150613c2483613d5e565b92508267ffffffffffffffff03821115613c4157613c40613e29565b5b828201905092915050565b6000613c5782613d44565b9150613c6283613d44565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c9b57613c9a613e29565b5b828202905092915050565b6000613cb182613d44565b9150613cbc83613d44565b925082821015613ccf57613cce613e29565b5b828203905092915050565b6000613ce582613d24565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b6000613d7d82613d5e565b9050919050565b82818337600083830152505050565b60005b83811015613db1578082015181840152602081019050613d96565b83811115613dc0576000848401525b50505050565b60006002820490506001821680613dde57607f821691505b60208210811415613df257613df1613e58565b5b50919050565b613e0182613ed4565b810181811067ffffffffffffffff82111715613e2057613e1f613e87565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f72656163686564206d617820737570706c79202d204d5347434f44453a20323060008201527f3032000000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e2079657420202d60008201527f204d5347434f44453a2032303035000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c7920202d204d5347434f44453a203260008201527f3030360000000000000000000000000000000000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574202d2060008201527f4d5347434f44453a203230303500000000000000000000000000000000000000602082015250565b7f6e65656420746f2073656e64206d6f7265204554480000000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7920202d204d5347434f4460008201527f453a203230303400000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f77686974656c6973742073616c6520686173206e6f7420626567756e2079657460008201527f202d204d5347434f44453a203230303100000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7920202d204d5347434f4460008201527f453a203230303700000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f746f6b656e206e6f742065786973740000000000000000000000000000000000600082015250565b7f77686974656c6973742073616c6520686173206e6f7420626567756e2079657460008201527f202d204d5347434f44453a203230303000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e7472616374202d60008201527f204d5347434f44453a2039393939000000000000000000000000000000000000602082015250565b6142fa81613cda565b811461430557600080fd5b50565b61431181613cec565b811461431c57600080fd5b50565b61432881613cf8565b811461433357600080fd5b50565b61433f81613d44565b811461434a57600080fd5b50565b61435681613d4e565b811461436157600080fd5b50565b61436d81613d5e565b811461437857600080fd5b5056fea2646970667358221220296000d802295bb6014592bd05dbcb884e74b982defdf481e70b5d39b7a9ef1764736f6c63430008070033506f7374204d6f6465726e2052656e61697373616e636520436f6c6c656374696f6e000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000032