60806040526000600455600060055534801561001a57600080fd5b506040516123563803806123568339818101604052604081101561003d57600080fd5b810190808051906020019092919080519060200190929190505050600061006861018f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610197565b600033905090565b6121b0806101a66000396000f3fe608060405234801561001057600080fd5b50600436106101725760003560e01c80637b0a47ee116100de578063c8f33c9111610097578063e9fad8ee11610071578063e9fad8ee14610575578063ebe2b12b1461057f578063f2fde38b1461059d578063f7c618c1146105e157610172565b8063c8f33c911461051b578063cd3daf9d14610539578063df136d651461055757610172565b80637b0a47ee146103d757806380faa57d146103f55780638b876347146104135780638da5cb5b1461046b578063a694fc3a1461049f578063aa9700c5146104cd57610172565b80632e17de78116101305780632e17de78146102db5780633c6b16ab146103095780633d18b9121461033757806351ed6a301461034157806370a0823114610375578063715018a6146103cd57610172565b80628cc262146101775780630700037d146101cf5780630d68b76114610227578063101114cf1461026b57806318160ddd1461029f5780631be05289146102bd575b600080fd5b6101b96004803603602081101561018d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610615565b6040518082815260200191505060405180910390f35b610211600480360360208110156101e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106fc565b6040518082815260200191505060405180910390f35b6102696004803603602081101561023d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610714565b005b610273610820565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102a7610846565b6040518082815260200191505060405180910390f35b6102c5610850565b6040518082815260200191505060405180910390f35b610307600480360360208110156102f157600080fd5b8101908080359060200190929190505050610857565b005b6103356004803603602081101561031f57600080fd5b8101908080359060200190929190505050610b00565b005b61033f610d76565b005b610349610f55565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103b76004803603602081101561038b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f7b565b6040518082815260200191505060405180910390f35b6103d5610fc4565b005b6103df61114a565b6040518082815260200191505060405180910390f35b6103fd611150565b6040518082815260200191505060405180910390f35b6104556004803603602081101561042957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611163565b6040518082815260200191505060405180910390f35b61047361117b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104cb600480360360208110156104b557600080fd5b81019080803590602001909291905050506111a4565b005b610519600480360360408110156104e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061144f565b005b610523611591565b6040518082815260200191505060405180910390f35b610541611597565b6040518082815260200191505060405180910390f35b61055f61162f565b6040518082815260200191505060405180910390f35b61057d611635565b005b610587611650565b6040518082815260200191505060405180910390f35b6105df600480360360208110156105b357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611656565b005b6105e9611861565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006106f5600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106e7670de0b6b3a76400006106d96106c2600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106b4611597565b61188790919063ffffffff16565b6106cb88610f7b565b6118d190919063ffffffff16565b61195790919063ffffffff16565b6119a190919063ffffffff16565b9050919050565b600b6020528060005260406000206000915090505481565b61071c611a29565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600354905090565b62278d0081565b33610860611597565b60078190555061086e611150565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461093b576108b181610615565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600754600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600082116109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b6109c68260035461188790919063ffffffff16565b600381905550610a1e82600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461188790919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610aae3383600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a319092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75836040518082815260200191505060405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ba6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806121306021913960400191505060405180910390fd5b6000610bb0611597565b600781905550610bbe611150565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c8b57610c0181610615565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600754600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6004544210610cb557610caa62278d008361195790919063ffffffff16565b600581905550610d18565b6000610ccc4260045461188790919063ffffffff16565b90506000610ce5600554836118d190919063ffffffff16565b9050610d0f62278d00610d0183876119a190919063ffffffff16565b61195790919063ffffffff16565b60058190555050505b42600681905550610d3562278d00426119a190919063ffffffff16565b6004819055507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d826040518082815260200191505060405180910390a15050565b33610d7f611597565b600781905550610d8d611150565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e5a57610dd081610615565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600754600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000610e6533610615565b90506000811115610f51576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f023382600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a319092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486826040518082815260200191505060405180910390a25b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fcc611a29565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461108c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60055481565b600061115e42600454611ad3565b905090565b600a6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b336111ad611597565b6007819055506111bb611150565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611288576111fe81610615565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600754600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600082116112fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b611313826003546119a190919063ffffffff16565b60038190555061136b82600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119a190919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113fd333084600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aec909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d836040518082815260200191505060405180910390a25050565b611457611a29565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611517576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611549611522611a29565b828473ffffffffffffffffffffffffffffffffffffffff16611a319092919063ffffffff16565b808273ffffffffffffffffffffffffffffffffffffffff167ffba2d3bdfb2d601eb66a89783a2c614856101cadce71556753c2edadd60c831c60405160405180910390a35050565b60065481565b6000806115a2610846565b14156115b257600754905061162c565b6116296116186115c0610846565b61160a670de0b6b3a76400006115fc6005546115ee6006546115e0611150565b61188790919063ffffffff16565b6118d190919063ffffffff16565b6118d190919063ffffffff16565b61195790919063ffffffff16565b6007546119a190919063ffffffff16565b90505b90565b60075481565b61164661164133610f7b565b610857565b61164e610d76565b565b60045481565b61165e611a29565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806120c36026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006118c983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bad565b905092915050565b6000808314156118e45760009050611951565b60008284029050828482816118f557fe5b041461194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061210f6021913960400191505060405180910390fd5b809150505b92915050565b600061199983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611c6d565b905092915050565b600080828401905083811015611a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b611ace8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d33565b505050565b6000818310611ae25781611ae4565b825b905092915050565b611ba7846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d33565b50505050565b6000838311158290611c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611c1f578082015181840152602081019050611c04565b50505050905090810190601f168015611c4c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290611d19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cde578082015181840152602081019050611cc3565b50505050905090810190601f168015611d0b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611d2557fe5b049050809150509392505050565b6060611d95826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611e229092919063ffffffff16565b9050600081511115611e1d57808060200190516020811015611db657600080fd5b8101908080519060200190929190505050611e1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612151602a913960400191505060405180910390fd5b5b505050565b6060611e318484600085611e3a565b90509392505050565b606082471015611e95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806120e96026913960400191505060405180910390fd5b611e9e85611fe3565b611f10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310611f605780518252602082019150602081019050602083039250611f3d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611fc2576040519150601f19603f3d011682016040523d82523d6000602084013e611fc7565b606091505b5091509150611fd7828286611ff6565b92505050949350505050565b600080823b905060008111915050919050565b60608315612006578290506120bb565b6000835111156120195782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612080578082015181840152602081019050612065565b50505050905090810190601f1680156120ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616c6c6572206973206e6f742072657761726420646973747269627574696f6e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212206784f260447d940c8027f2a29871a384cb00c75897f78061972d61b9ff123d8b64736f6c63430007040033000000000000000000000000d8cd219b8c8f088c6f368760e52369e07189972d000000000000000000000000aee433adebe0fbb88daa47ef0c1a513caa52ef02