60806040526000600655600060075534801561001a57600080fd5b506040516040806124688339810180604052604081101561003a57600080fd5b81019080805190602001909291908051906020019092919050505080806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506100a56101aa60201b60201c565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a381600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506101b2565b600033905090565b6122a7806101c16000396000f3fe608060405234801561001057600080fd5b50600436106101c35760003560e01c806380faa57d116100f9578063c8f33c9111610097578063e9fad8ee11610071578063e9fad8ee146106bc578063ebe2b12b146106c6578063f2fde38b146106e4578063f7c618c114610728576101c3565b8063c8f33c9114610662578063cd3daf9d14610680578063df136d651461069e576101c3565b80638da5cb5b116100d35780638da5cb5b146105705780638f32d59b146105ba5780639bc289f1146105dc578063a694fc3a14610634576101c3565b806380faa57d146104a257806388779d2d146104c05780638b87634714610518576101c3565b80632e1a7d4d1161016657806351ed6a301161014057806351ed6a30146103d857806370a0823114610422578063715018a61461047a5780637b0a47ee14610484576101c3565b80632e1a7d4d146103725780633c6b16ab146103a05780633d18b912146103ce576101c3565b806318160ddd116101a257806318160ddd146102bc5780631820cabb146102da5780631be05289146102f85780632bbf532a14610316576101c3565b80628cc262146101c85780630700037d146102205780630d68b76114610278575b600080fd5b61020a600480360360208110156101de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610772565b6040518082815260200191505060405180910390f35b6102626004803603602081101561023657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610859565b6040518082815260200191505060405180910390f35b6102ba6004803603602081101561028e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610871565b005b6102c4610931565b6040518082815260200191505060405180910390f35b6102e261093b565b6040518082815260200191505060405180910390f35b610300610940565b6040518082815260200191505060405180910390f35b6103586004803603602081101561032c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610947565b604051808215151515815260200191505060405180910390f35b61039e6004803603602081101561038857600080fd5b81019080803590602001909291905050506109a4565b005b6103cc600480360360208110156103b657600080fd5b8101908080359060200190929190505050610c14565b005b6103d6610e97565b005b6103e0611078565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104646004803603602081101561043857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061109d565b6040518082815260200191505060405180910390f35b6104826110e6565b005b61048c611223565b6040518082815260200191505060405180910390f35b6104aa611229565b6040518082815260200191505060405180910390f35b610502600480360360208110156104d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061123c565b6040518082815260200191505060405180910390f35b61055a6004803603602081101561052e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611254565b6040518082815260200191505060405180910390f35b61057861126c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105c2611296565b604051808215151515815260200191505060405180910390f35b61061e600480360360208110156105f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112f5565b6040518082815260200191505060405180910390f35b6106606004803603602081101561064a57600080fd5b810190808035906020019092919050505061133e565b005b61066a611564565b6040518082815260200191505060405180910390f35b61068861156a565b6040518082815260200191505060405180910390f35b6106a6611602565b6040518082815260200191505060405180910390f35b6106c4611608565b005b6106ce611623565b6040518082815260200191505060405180910390f35b610726600480360360208110156106fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611629565b005b6107306116b1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000610852600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610844670de0b6b3a764000061083661081f600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461081161156a565b6116d790919063ffffffff16565b6108288861109d565b61172190919063ffffffff16565b6117ab90919063ffffffff16565b6117f590919063ffffffff16565b9050919050565b600b6020528060005260406000206000915090505481565b610879611296565b15156108ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600154905090565b600081565b6213c68081565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544210151561099a576001905061099f565b600090505b919050565b336109ad61156a565b6009819055506109bb611229565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610a8a57610a0081610772565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600082111515610b02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544210151515610bb9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4163636f756e74207374696c6c20696e206c6f636b000000000000000000000081525060200191505060405180910390fd5b610bc28261187f565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040518082815260200191505060405180910390a25050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c5561197e565b73ffffffffffffffffffffffffffffffffffffffff16141515610cc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806122316021913960400191505060405180910390fd5b6000610ccd61156a565b600981905550610cdb611229565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610daa57610d2081610772565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60065442101515610dd657610dcb6213c680836117ab90919063ffffffff16565b600781905550610e39565b6000610ded426006546116d790919063ffffffff16565b90506000610e066007548361172190919063ffffffff16565b9050610e306213c680610e2283876117f590919063ffffffff16565b6117ab90919063ffffffff16565b60078190555050505b42600881905550610e566213c680426117f590919063ffffffff16565b6006819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d826040518082815260200191505060405180910390a15050565b33610ea061156a565b600981905550610eae611229565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610f7d57610ef381610772565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000610f8833610772565b90506000811115611074576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110253382600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119869092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040518082815260200191505060405180910390a25b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110ee611296565b1515611162576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60075481565b600061123742600654611a57565b905090565b600c6020528060005260406000206000915090505481565b600a6020528060005260406000206000915090505481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112d961197e565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3361134761156a565b600981905550611355611229565b600881905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156114245761139a81610772565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600954600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008211151561149c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b6114a582611a70565b60006114bb6000426117f590919063ffffffff16565b90506006548111156114cd5760065490505b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d846040518082815260200191505060405180910390a2505050565b60085481565b600080611575610931565b14156115855760095490506115ff565b6115fc6115eb611593610931565b6115dd670de0b6b3a76400006115cf6007546115c16008546115b3611229565b6116d790919063ffffffff16565b61172190919063ffffffff16565b61172190919063ffffffff16565b6117ab90919063ffffffff16565b6009546117f590919063ffffffff16565b90505b90565b60095481565b6116196116143361109d565b6109a4565b611621610e97565b565b60065481565b611631611296565b15156116a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6116ae81611b71565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061171983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cb9565b905092915050565b60008083141561173457600090506117a5565b6000828402905082848281151561174757fe5b041415156117a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806122106021913960400191505060405180910390fd5b809150505b92915050565b60006117ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d7b565b905092915050565b6000808284019050838110151515611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b611894816001546116d790919063ffffffff16565b6001819055506118ec81600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116d790919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061197b33826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119869092919063ffffffff16565b50565b600033905090565b611a52838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e45565b505050565b6000818310611a665781611a68565b825b905092915050565b611a85816001546117f590919063ffffffff16565b600181905550611add81600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117f590919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b6e3330836000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612098909392919063ffffffff16565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611bf9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121ea6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008383111582901515611d68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d2d578082015181840152602081019050611d12565b50505050905090810190601f168015611d5a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182901515611e29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611dee578082015181840152602081019050611dd3565b50505050905090810190601f168015611e1b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385811515611e3757fe5b049050809150509392505050565b611e648273ffffffffffffffffffffffffffffffffffffffff1661219e565b1515611ed8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083101515611f295780518252602082019150602081019050602083039250611f04565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611f8b576040519150601f19603f3d011682016040523d82523d6000602084013e611f90565b606091505b509150915081151561200a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b6000815111156120925780806020019051602081101561202957600080fd5b81019080805190602001909291905050501515612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612252602a913960400191505060405180910390fd5b5b50505050565b612198848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611e45565b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156121e05750808214155b9250505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742072657761726420646973747269627574696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a165627a7a72305820b76d6af3469e8c59fb7d5dde96ca9377478aa2a8b25f580aea7a6787ec0735d10029000000000000000000000000f3ae5d769e153ef72b4e3591ac004e89f48107a100000000000000000000000085673c92f0f27a9c4d8c221f6bfefa33b716338a