diff --git a/bin/interactive_client.js b/bin/interactive_client.js index c4e331e3a0..983c3ac031 100644 --- a/bin/interactive_client.js +++ b/bin/interactive_client.js @@ -17,11 +17,11 @@ function completer(line) { if (line.trim().indexOf("open")) { completions = 'localhost '.split(' '); - hits = completions.filter(function(c) { return c.indexOf(line) == 0 }); + hits = completions.filter(function(c) { return c.indexOf(line) === 0 }); return [hits.length ? hits : completions, line] } else { completions = 'open close getEndpoints quit'.split(' '); - hits = completions.filter(function(c) { return c.indexOf(line) == 0 }); + hits = completions.filter(function(c) { return c.indexOf(line) === 0 }); // show all completions if none found return [hits.length ? hits : completions, line] } diff --git a/bin/more.js b/bin/more.js new file mode 100644 index 0000000000..99c960db48 --- /dev/null +++ b/bin/more.js @@ -0,0 +1,39 @@ +/* + * write a file to the console, preserving the Ansi color decoration + */ +var argv = require('optimist') + .usage('Usage: $0 ') + .argv; + +var fs = require("fs"); + + + +function readLines(input, func) { + var remaining = ''; + + input.on('data', function(data) { + remaining += data; + var index = remaining.indexOf('\n'); + while (index > -1) { + var line = remaining.substring(0, index); + remaining = remaining.substring(index + 1); + func(line); + index = remaining.indexOf('\n'); + } + }); + + input.on('end', function() { + if (remaining.length > 0) { + func(remaining); + } + }); +} + +function func(data) { + console.log(data); +} + +var input = fs.createReadStream(argv["_"][0]); + +readLines(input, func); diff --git a/bin/opcua_interceptor.js b/bin/opcua_interceptor.js index cb26217c6f..6c96a90173 100644 --- a/bin/opcua_interceptor.js +++ b/bin/opcua_interceptor.js @@ -36,7 +36,7 @@ TrafficAnalyser.prototype.add = function(data) } var messageHeader = opcua.readMessageHeader(stream); - if (messageHeader.msgType == "ERR") { + if (messageHeader.msgType === "ERR") { var err = new s.TCPErrorMessage(); err.decode(stream); diff --git a/bin/simple_client.js b/bin/simple_client.js index 4f757993f7..7fa27e3022 100644 --- a/bin/simple_client.js +++ b/bin/simple_client.js @@ -44,7 +44,7 @@ function browseTree(root, nodeId, callback) { root[node.browseName.name].typeDefinition =node.typeDefinition.toString(); root[node.browseName.name].nodes = {}; - if (node.typeDefinition.value == folderTypeNodeId.value || node.typeDefinition.value == 2000 || node.typeDefinition.value == 62 ) { + if (node.typeDefinition.value === folderTypeNodeId.value || node.typeDefinition.value === 2000 || node.typeDefinition.value === 62 ) { if (node.isForward) { //xx console.log(" appending : " + node.nodeId.displayText()); diff --git a/code_gen/generate_status_code.js b/code_gen/generate_status_code.js index ffa7c04937..66e0d02dab 100644 --- a/code_gen/generate_status_code.js +++ b/code_gen/generate_status_code.js @@ -4,53 +4,65 @@ var fs = require("fs"); var csv = require("csv"); var sprintf = require("sprintf").sprintf; + + // see OPC-UA Part 6 , A2 -var codeMap= {}; -csv().from.stream(fs.createReadStream(__dirname+'/StatusCodes.csv')).to.array(function(data) -{ - data.forEach(function(e){ - var codeName = e[0]; - codeMap[codeName] = parseInt(e[1]); - }); - //xx console.log(data); +var codeMap = {}; +csv().from.stream(fs.createReadStream(__dirname + '/StatusCodes.csv')).to.array(function (data) { + data.forEach(function (e) { + var codeName = e[0]; + codeMap[codeName] = parseInt(e[1]); + }); + //xx console.log(data); - parseStatusCodeXML(); + console.log("codeMap" , codeMap); + parseStatusCodeXML(); }); function parseStatusCodeXML() { - var xmlFile = "./code_gen/UA_StatusCodes.xml"; + var xmlFile = __dirname + "/UA_StatusCodes.xml"; var parser = new xml.Parser(); var obj = {}; - var outFile = fs.createWriteStream("lib/opcua_status_code.js"); + var outFile = fs.createWriteStream(__dirname + "/../lib/raw_status_codes.js"); outFile.write("// this file has been automatically generated\n"); + outFile.write(" exports.StatusCodes = { \n"); - parser.on('startElement',function(name,attrs) { - var obj ; - if ( name == "opc:Constant") { + + outFile.write(" Good: { name:'Good', value: 0, description:'No Error' }\n"); + + parser.on('startElement', function (name, attrs) { + + if (name == "opc:Constant") { var cstName = attrs.Name; if (cstName in codeMap) { - obj = { name:cstName,value:codeMap[cstName]}; + obj = { name: cstName, value: codeMap[cstName]}; } else { - console.log("cannot find",cstName); + console.log("cannot find", cstName); } - } else if ( name == "opc:Documentation") { + } else if (name == "opc:Documentation") { - parser.once("text",function(txt) { + parser.once("text", function (txt) { obj.description = txt; }); } }); - parser.on("endElement",function(name){ - if ( name === "opc:TypeDictionary") { - outFile.write("};\n"); - } else if ( name === "opc:Constant") { - outFile.write(sprintf(" %40s: { name: %40s , value: %6d ,description: \"%s\"}, \n",obj.name,"'"+obj.name+"'",obj.value, obj.description)); - } + + var sep = ","; + parser.on("endElement", function (name) { + + if (name === "opc:TypeDictionary") { + outFile.write("};\n"); + } else if (name === "opc:Constant") { + outFile.write( + sprintf("%1s %40s: { name: %40s , value: %6d ,description: \"%s\"}\n", + sep, obj.name, "'" + obj.name + "'", obj.value, obj.description)); + sep = ","; + } }); parser.write(fs.readFileSync(xmlFile)); diff --git a/lib/chunk_manager.js b/lib/chunk_manager.js index 6cb978e5b1..a90041559d 100644 --- a/lib/chunk_manager.js +++ b/lib/chunk_manager.js @@ -40,7 +40,7 @@ ChunkManager.prototype.write = function (buffer, length) { while (l > 0) { assert(length - input_cursor !== 0); - if (this.cursor == 0) { + if (this.cursor === 0) { // let the client to write some stuff at the start of the chunk if (!this._in_before_chunk) { this._in_before_chunk = true; diff --git a/lib/client/client_base.js b/lib/client/client_base.js index 4b8242a3c6..2cc586543e 100644 --- a/lib/client/client_base.js +++ b/lib/client/client_base.js @@ -206,6 +206,8 @@ OPCUAClientBase.prototype.__defineGetter__("transactionInProgress" ,function() { */ OPCUAClientBase.prototype.disconnect = function(callback) { + assert(_.isFunction(callback)); + if (this._secureChannel) { this._secureChannel.close(callback); this._secureChannel = null; diff --git a/lib/client/client_secure_channel_layer.js b/lib/client/client_secure_channel_layer.js index ddfb2aae79..0ec89506fd 100644 --- a/lib/client/client_secure_channel_layer.js +++ b/lib/client/client_secure_channel_layer.js @@ -128,7 +128,7 @@ _ResponseReceiver.prototype._handle_response= function(message_chunk) { debugLog(hexDump(message_chunk).blue.bold); debugLog(messageHeaderToString(message_chunk)); - if (this._expectedMsgTypes.indexOf(msgType) == -1) { + if (this._expectedMsgTypes.indexOf(msgType) === -1) { // invalid message type received var errMessage ="the incoming messageChunk with msgType " + msgType + " is invalid ! expecting "+ this._expectedMsgTypes; console.log(("ERROR ").red +errMessage); @@ -345,7 +345,7 @@ ClientSecureChannelLayer.prototype._performMessageTransaction = function(msgType return; } assert(self._transport, " must have a valid transport"); - assert(msgType.length == 3); + assert(msgType.length === 3); assert(responseClass); assert(_.isFunction(callback)); diff --git a/lib/datavalue.js b/lib/datavalue.js index 25f4ad8479..98aca124c4 100644 --- a/lib/datavalue.js +++ b/lib/datavalue.js @@ -3,7 +3,7 @@ var factories = require("./factories"); var ec = require("./encode_decode"); var set_flag = require("./utils").set_flag; var check_flag = require("./utils").check_flag; - +var StatusCodes = require("./opcua_status_code").StatusCode; var DataValueEncodingByte_Schema = { name:"DataValue_EncodingByte", @@ -51,7 +51,7 @@ var DataValue_Schema = { id: factories.next_available_id(), fields: [ { name:"value", fieldType:"Variant" , defaultValue: null }, - { name:"statusCode", fieldType:"StatusCode", defaultValue: 0x000 }, + { name:"statusCode", fieldType:"StatusCode", defaultValue: null }, { name:"sourceTimestamp", fieldType:"DateTime" , defaultValue: null }, { name:"sourcePicoseconds", fieldType:"UInt16" , defaultValue: 0 }, { name:"serverTimestamp", fieldType:"DateTime" , defaultValue: null }, @@ -71,7 +71,8 @@ var DataValue_Schema = { // write statusCode if (check_flag(encoding_mask,DataValueEncodingByte.StatusCode)) { - ec.encodeUInt32(dataValue.statusCode,stream); + //ec.encodeUInt32(dataValue.statusCode.value,stream); + ec.encodeStatusCode(dataValue.statusCode,stream); } // write sourceTimestamp if (check_flag(encoding_mask,DataValueEncodingByte.SourceTimestamp)) { @@ -99,7 +100,8 @@ var DataValue_Schema = { } // read statusCode if (check_flag(encoding_mask,DataValueEncodingByte.StatusCode)) { - dataValue.statusCode = ec.decodeUInt32(stream); + dataValue.statusCode = ec.decodeStatusCode(stream); + } // read sourceTimestamp if (check_flag(encoding_mask,DataValueEncodingByte.SourceTimestamp)) { diff --git a/lib/encode_decode.js b/lib/encode_decode.js index 5e282943ae..50e760fa5b 100644 --- a/lib/encode_decode.js +++ b/lib/encode_decode.js @@ -22,7 +22,7 @@ var check_flag = require("./utils").check_flag; exports.decodeUAString = function (stream) { var value; var length = stream.readInteger(); - if (length == -1) { + if (length === -1) { value = undefined; } else { value = stream._buffer.toString('binary', stream.length, stream.length + length); @@ -52,6 +52,7 @@ exports.decodeUInt16 = function (stream) { exports.encodeInt16 = function (value, stream) { + assert(_.isFinite(value)); stream.writeInt16(value); }; @@ -60,6 +61,7 @@ exports.decodeInt16 = function (stream) { }; exports.encodeInt32 = function (value, stream) { + assert(_.isFinite(value)); stream.writeInteger(value); }; @@ -210,7 +212,7 @@ exports.encodeDateTime = function(date, stream) { stream.writeUInt32(lo); stream.writeUInt32(hi); - assert( date.toString() == bn_hundredNanoSecondFrom1601ToDate(hi,lo).toString()); + assert( date.toString() === bn_hundredNanoSecondFrom1601ToDate(hi,lo).toString()); }; exports.decodeDateTime = function(stream) { @@ -364,7 +366,7 @@ exports.encodeNodeId = function(nodeId,stream) ec.encodeByteString(nodeId.value,stream); break; default: - assert( encoding_byte == EnumNodeIdEncoding.Guid.value , " encoding_byte = " + encoding_byte); + assert( encoding_byte === EnumNodeIdEncoding.Guid.value , " encoding_byte = " + encoding_byte); stream.writeInt16(nodeId.namespace); ec.encodeGUID(nodeId.value,stream); break; @@ -397,7 +399,7 @@ var _decodeNodeId = function(encoding_byte,stream) { value = ec.decodeByteString(stream); break; default: - assert( encoding_byte == EnumNodeIdEncoding.Guid.value ," encoding_byte = " + encoding_byte.toString(16)); + assert( encoding_byte === EnumNodeIdEncoding.Guid.value ," encoding_byte = " + encoding_byte.toString(16)); namespace = stream.readInt16(); value=ec.decodeGUID(stream); assert(is_guid(value)); @@ -463,3 +465,5 @@ exports.decodeByteString = function(stream) { return stream.readByteStream(); }; +exports.decodeStatusCode = require("./opcua_status_code").decodeStatusCode; +exports.encodeStatusCode = require("./opcua_status_code").encodeStatusCode; \ No newline at end of file diff --git a/lib/factories.js b/lib/factories.js index 3e340a32d9..9f5a9e31d8 100644 --- a/lib/factories.js +++ b/lib/factories.js @@ -6,13 +6,14 @@ var _ = require("underscore"); var hexDump = require("./utils").hexDump; var objectNodeIds = require("./opcua_node_ids").Object; +var sc = require("./opcua_status_code"); +assert(sc.StatusCodes.Good.value==0); -factories = {}; -_enumerations = {}; +var factories = {}; +var _enumerations = {}; - -coerceNodeId = require("./nodeid").coerceNodeId; +var coerceNodeId = require("./nodeid").coerceNodeId; var _defaultType = [ @@ -47,6 +48,18 @@ var _defaultType = [ { name: "NodeId", encode: ec.encodeNodeId, decode: ec.decodeNodeId, defaultValue: ec.makeNodeId , coerce: coerceNodeId }, { name: "ExpandedNodeId", encode: ec.encodeExpandedNodeId, decode: ec.decodeExpandedNodeId, defaultValue: ec.makeExpandedNodeId }, + //The StatusCode is a 32-bit unsigned integer. The top 16 bits represent the numeric value of the + //code that shall be used for detecting specific errors or conditions. The bottom 16 bits are bit flags + //that contain additional information but do not affect the meaning of the StatusCode. + // 7.33 Part 4 - P 143 + { + name:"StatusCode", + encode: sc.encodeStatusCode, + decode: sc.decodeStatusCode, + defaultValue: sc.StatusCodes.Good + }, + + { name: "ByteString", encode: ec.encodeByteString, decode: ec.decodeByteString, defaultValue: function () { return new Buffer(0); } }, @@ -79,7 +92,7 @@ function decodeExtensionObject(stream) { var nodeId = ec.decodeNodeId(stream); var encodingType = stream.readByte(); var length = stream.readUInt32(); - if (nodeId.value == 0 || encodingType == 0) { + if (nodeId.value === 0 || encodingType === 0) { return null; } var object = exports.constructObject(nodeId); @@ -494,7 +507,7 @@ var _exploreObject = function (kind_of_field, self, field, extra, data) { data.lines.push(r(padding + fieldName, 30) + " " + r(fieldType, 15)); data.lines.push(_hexDump); } else { - if (fieldType == "IntegerId" || fieldType == "UInt32") { + if (fieldType === "IntegerId" || fieldType === "UInt32") { value = "" + value + " 0x" + value.toString(16); } str = r(padding + fieldName, 30) + " " + r(fieldType, 15) + " " + value; diff --git a/lib/guid.js b/lib/guid.js index b8e82db97f..c5cbe42679 100644 --- a/lib/guid.js +++ b/lib/guid.js @@ -10,6 +10,6 @@ function is_guid(value) { exports.is_guid = is_guid; exports.isValidGUID = function (guid) { - assert(guid.length == 36); + assert(guid.length === 36); return is_guid(guid); }; diff --git a/lib/message_builder_base.js b/lib/message_builder_base.js index 25d4ced6bd..52adcbcb03 100644 --- a/lib/message_builder_base.js +++ b/lib/message_builder_base.js @@ -24,6 +24,9 @@ var MessageBuilderBase = function () { this.packetAssembler.on("message",function(messageChunk){ self._feed_messageChunk(messageChunk); }); + this.packetAssembler.on("newMessage",function(info,data){ + self.emit("start_chunk",info,data); + }); this._init_new(); }; util.inherits(MessageBuilderBase, EventEmitter); @@ -72,6 +75,10 @@ MessageBuilderBase.prototype._append = function (message_chunk) { }; +/** + * Feed message builder with some data + * @param data + */ MessageBuilderBase.prototype.feed = function (data) { this.packetAssembler.feed(data); }; @@ -90,7 +97,7 @@ MessageBuilderBase.prototype._feed_messageChunk = function(messageChunk) { var full_message_body = Buffer.concat(this.blocks); - assert(full_message_body.length == this.total_size); + assert(full_message_body.length === this.total_size); this.emit("full_message_body", full_message_body); @@ -101,11 +108,11 @@ MessageBuilderBase.prototype._feed_messageChunk = function(messageChunk) { // be ready for next block this._init_new(); - } else if (messageHeader.isFinal == "A") { + } else if (messageHeader.isFinal === "A") { // error this.emit("error"); - } else if (messageHeader.isFinal == "C") { + } else if (messageHeader.isFinal === "C") { this._append(messageChunk); // check that this packet is in the correct order diff --git a/lib/nodeid.js b/lib/nodeid.js index f6181d531e..0b5663d373 100644 --- a/lib/nodeid.js +++ b/lib/nodeid.js @@ -38,7 +38,7 @@ NodeId.prototype.toString = function() { case NodeIdType.GUID: return "ns="+ this.namespace +";g="+this.value+""; default: - assert(this.identifierType == NodeIdType.BYTESTRING,"invalid identifierType in NodeId : " + this.identifierType); + assert(this.identifierType === NodeIdType.BYTESTRING,"invalid identifierType in NodeId : " + this.identifierType); return "ns="+ this.namespace +";b="+this.value.toString("hex")+""; } }; @@ -67,7 +67,7 @@ function coerceNodeId(value,namespace){ namespace = namespace || 0; var identifierType = NodeIdType.NUMERIC; - if (typeof value == "string" ) { + if (typeof value === "string" ) { identifierType= NodeIdType.STRING; if ( value.substr(0,2) === "i=" ) { @@ -116,7 +116,7 @@ var makeNodeId = function makeNodeId(value,namespace) { namespace = namespace || 0; var identifierType = NodeIdType.NUMERIC; - if (typeof value == "string" ) { + if (typeof value === "string" ) { // 1 2 3 // 012345678901234567890123456789012345 // "72962B91-FA75-4AE6-8D28-B404DC7DAF63" @@ -218,7 +218,7 @@ var _known_NodeIds = null; NodeId.prototype.displayText = function() { - if (_known_NodeIds == null) { + if (_known_NodeIds === null) { // build reverse index _known_NodeIds = {}; diff --git a/lib/nodeopcua.js b/lib/nodeopcua.js index da3010c767..eb37152d25 100644 --- a/lib/nodeopcua.js +++ b/lib/nodeopcua.js @@ -80,10 +80,10 @@ function decodeMessage(stream, className) { assert(className instanceof Function , " expecting a function for " + className); var header = readMessageHeader(stream); - assert(stream.length == 8); + assert(stream.length === 8); var obj; - if (header.msgType == "ERR") { + if (header.msgType === "ERR") { //xx console.log(" received an error"); obj = new opcua.TCPErrorMessage(); obj.decode(stream); @@ -131,7 +131,7 @@ var encodeMessage = function (msgType, messageContent, stream) { writeTCPMessageHeader(msgType,"F",total_length,stream); messageContent.encode(stream); - assert(total_length == stream.length , "invalid message size"); + assert(total_length === stream.length , "invalid message size"); }; function packTcpMessage(msgType,encodableObject) { @@ -175,3 +175,4 @@ exports.decodeMessage = decodeMessage; //xx exports.encodeMessage = encodeMessage; exports.packTcpMessage = packTcpMessage; exports.parseEndpointUrl = parseEndpointUrl; + diff --git a/lib/opcua-client.js b/lib/opcua-client.js index cf13b09942..4d5773d5be 100644 --- a/lib/opcua-client.js +++ b/lib/opcua-client.js @@ -104,14 +104,14 @@ OPCUASession.prototype.readVariableValue = function(nodes,callback) { var request = new read_service.ReadRequest({ nodesToRead: nodesToRead }); - assert( nodes.length == request.nodesToRead.length); + assert( nodes.length === request.nodesToRead.length); this.performMessageTransaction(request, read_service.ReadResponse,function(err,response) { if(err) { callback(err,response); } else { - assert( nodes.length == response.results.length); + assert( nodes.length === response.results.length); callback(null,response.results,response.diagnosticInfos); } }); diff --git a/lib/opcua-server.js b/lib/opcua-server.js index 21f7c287d9..085d5693c2 100644 --- a/lib/opcua-server.js +++ b/lib/opcua-server.js @@ -21,20 +21,12 @@ var crypto = require("crypto"); var OPCUAServerEndPoint = require("./server/server_endpoint").OPCUAServerEndPoint; - - - - - - function ServerSession(sessionId) { this.authenticationToken = new NodeId(NodeIdType.BYTESTRING,crypto.randomBytes(16)); this.nodeId = new NodeId(NodeIdType.NUMERIC,sessionId,0); } - - OPCUAServer = function (options) { options = options || {}; @@ -45,11 +37,13 @@ OPCUAServer = function (options) { self.engine = new ServerEngine(); + self.nonce = crypto.randomBytes(32); + self.protocolVersion = 1; self.connected_client_count = 0; // add the tcp/ip endpoint with no security - var endpoint = new OPCUAServerEndPoint(this, 6543 , { + var endpoint = new OPCUAServerEndPoint(this, 26543 , { defaultSecureTokenLiveTime: options.defaultSecureTokenLiveTime || 60000 }); @@ -190,7 +184,7 @@ OPCUAServer.prototype.getSignedCertificate = function() { OPCUAServer.prototype._on_CreateSessionRequest = function(request,channel) { var server = this; - assert(request._schema.name == "CreateSessionRequest"); + assert(request._schema.name === "CreateSessionRequest"); var session = server.createSession(); assert(session); @@ -204,11 +198,17 @@ OPCUAServer.prototype._on_CreateSessionRequest = function(request,channel) { revisedSessionTimeout: request.requestedSessionTimeout, - serverNonce: null, + serverNonce: server.nonce, + + serverCertificate: server.getCertificate(), //The endpoints provided by the server. - serverEndpoints: null, + serverEndpoints: server._get_endpoints(), + + serverSoftwareCertificates: null, + serverSignature: null, +/* // SignedSoftwareCertificate: The software certificates owned by the server. serverSoftwareCertificates: [ server.getSignedCertificate() @@ -222,9 +222,9 @@ OPCUAServer.prototype._on_CreateSessionRequest = function(request,channel) { // The SignatureAlgorithmshall be the asymmetricSignaturealgorithm specified in the // SecurityPolicyfor the Endpoint serverSignature: null, - +*/ // The maximum message size accepted by the server - maxRequestMessageSize: 0 + maxRequestMessageSize: 0x4000000 }); assert(response.authenticationToken); @@ -235,7 +235,7 @@ OPCUAServer.prototype._on_CreateSessionRequest = function(request,channel) { OPCUAServer.prototype._on_ActivateSessionRequest = function(request,channel) { var server = this; - assert(request._schema.name == "ActivateSessionRequest"); + assert(request._schema.name === "ActivateSessionRequest"); // get the sezssion var authenticationToken = request.requestHeader.authenticationToken; @@ -244,10 +244,12 @@ OPCUAServer.prototype._on_ActivateSessionRequest = function(request,channel) { console.log(" Bad Session in _on_ActivateSessionRequest",authenticationToken.value.toString("hex")); //xx response = new s.ServiceFault({ response = new s.ActivateSessionResponse({ - responseHeader: { statusCode: StatusCodes.Bad_SessionNotActivated.value } + responseHeader: { statusCode: StatusCodes.Bad_SessionNotActivated } }); } else { - response = new s.ActivateSessionResponse({}); + response = new s.ActivateSessionResponse({ + serverNonce: server.nonce + }); } channel.send_response("MSG", response); }; @@ -256,15 +258,15 @@ OPCUAServer.prototype._on_CloseSessionRequest = function(request,channel) { var server = this; var response; - assert(request._schema.name == "CloseSessionRequest"); + assert(request._schema.name === "CloseSessionRequest"); var authenticationToken = request.requestHeader.authenticationToken; var session = server.getSession(authenticationToken); if (!session) { console.log(" Bad Session in _on_CloseSessionRequest"); response = new s.ServiceFault({ - responseHeader: { statusCode: StatusCodes.Bad_SessionClosed.value} + responseHeader: { statusCode: StatusCodes.Bad_SessionClosed} }); - assert(response.responseHeader.statusCode == StatusCodes.Bad_SessionClosed.value); + assert(response.responseHeader.statusCode === StatusCodes.Bad_SessionClosed); } else { response = new s.CloseSessionResponse({}); } @@ -276,8 +278,8 @@ OPCUAServer.prototype._on_CloseSessionRequest = function(request,channel) { OPCUAServer.prototype._on_Browse = function(browseRequest,channel) { var server = this; var engine = server.engine; - assert(browseRequest._schema.name == "BrowseRequest"); - assert(browseRequest.nodesToBrowse[0]._schema.name == "BrowseDescription"); + assert(browseRequest._schema.name === "BrowseRequest"); + assert(browseRequest.nodesToBrowse[0]._schema.name === "BrowseDescription"); var results = engine.browse(browseRequest.nodesToBrowse); assert(results[0]._schema.name =="BrowseResult"); @@ -293,8 +295,8 @@ OPCUAServer.prototype._on_Browse = function(browseRequest,channel) { OPCUAServer.prototype._on_Read = function(readRequest,channel) { var server = this; var engine = server.engine; - assert(readRequest._schema.name == "ReadRequest"); - assert(readRequest.nodesToRead[0]._schema.name == "ReadValueId"); + assert(readRequest._schema.name === "ReadRequest"); + assert(readRequest.nodesToRead[0]._schema.name === "ReadValueId"); var results = engine.read(readRequest.nodesToRead); assert(results[0]._schema.name =="DataValue"); @@ -306,6 +308,12 @@ OPCUAServer.prototype._on_Read = function(readRequest,channel) { channel.send_response("MSG", response); }; + +OPCUAServer.prototype._get_endpoints = function() { + return this.endpoints.map(function (endpoint) { + return endpoint.endpointDescription(); + }); +} /** * * @param request @@ -315,13 +323,11 @@ OPCUAServer.prototype._on_Read = function(readRequest,channel) { OPCUAServer.prototype._on_GetEndpointsRequest = function (request, channel) { var server = this; - assert(request._schema.name == "GetEndpointsRequest"); + assert(request._schema.name === "GetEndpointsRequest"); var response = new s.GetEndpointsResponse({}); - response.endpoints = server.endpoints.map(function (endpoint) { - return endpoint.endpointDescription(); - }); + response.endpoints = server._get_endpoints(); channel.send_response("MSG", response); @@ -365,7 +371,10 @@ OPCUAServer.prototype.registerServer = function (discovery_server_endpointUrl,ca disconnect(callback); }); } else { - disconnect(err); + console.log(" cannot register server to discovery server " + discovery_server_endpointUrl); + console.log(" " + err.message); + console.log(" make sure discovery server is up and running.") + disconnect(callback); } }) diff --git a/lib/opcua_discovery_server.js b/lib/opcua_discovery_server.js index 1d84ade456..7025886ed6 100644 --- a/lib/opcua_discovery_server.js +++ b/lib/opcua_discovery_server.js @@ -88,7 +88,7 @@ OPCUADiscoveryServer.prototype._on_GetEndpointsRequest = function (request,chann //xx OPCUAServer.prototype._on_GetEndpointsRequest.apply(this,arguments); var server = this; - assert(request._schema.name == "GetEndpointsRequest"); + assert(request._schema.name === "GetEndpointsRequest"); var response = new s.GetEndpointsResponse({}); response.endpoints = server.endpoints.map(function (endpoint) { @@ -101,7 +101,7 @@ OPCUADiscoveryServer.prototype._on_GetEndpointsRequest = function (request,chann OPCUADiscoveryServer.prototype._on_RegisterServerRequest = function (request,channel,endpoint) { var server = this; - assert(request._schema.name == "RegisterServerRequest"); + assert(request._schema.name === "RegisterServerRequest"); assert(request instanceof RegisterServerRequest); // Bad_ServerUriInvalid @@ -120,7 +120,7 @@ OPCUADiscoveryServer.prototype._on_RegisterServerRequest = function (request,cha OPCUADiscoveryServer.prototype._on_FindServersRequest = function (request,channel,endpoint) { var server = this; - assert(request._schema.name == "FindServersRequest"); + assert(request._schema.name === "FindServersRequest"); assert(request instanceof FindServersRequest); var servers = server.registered_servers.map(function(registered_server){ diff --git a/lib/opcua_status_code.js b/lib/opcua_status_code.js index 26639d8daf..7eab6744ca 100644 --- a/lib/opcua_status_code.js +++ b/lib/opcua_status_code.js @@ -1,211 +1,73 @@ -// this file has been automatically generated - exports.StatusCodes = { - Bad_UnexpectedError: { name: 'Bad_UnexpectedError' , value: 1 ,description: "An unexpected error occurred."}, - Bad_InternalError: { name: 'Bad_InternalError' , value: 2 ,description: "An internal error occurred as a result of a programming or configuration error."}, - Bad_OutOfMemory: { name: 'Bad_OutOfMemory' , value: 3 ,description: "Not enough memory to complete the operation."}, - Bad_ResourceUnavailable: { name: 'Bad_ResourceUnavailable' , value: 4 ,description: "An operating system resource is not available."}, - Bad_CommunicationError: { name: 'Bad_CommunicationError' , value: 5 ,description: "A low level communication error occurred."}, - Bad_EncodingError: { name: 'Bad_EncodingError' , value: 6 ,description: "Encoding halted because of invalid data in the objects being serialized."}, - Bad_DecodingError: { name: 'Bad_DecodingError' , value: 7 ,description: "Decoding halted because of invalid data in the stream."}, - Bad_EncodingLimitsExceeded: { name: 'Bad_EncodingLimitsExceeded' , value: 8 ,description: "The message encoding/decoding limits imposed by the stack have been exceeded."}, - Bad_RequestTooLarge: { name: 'Bad_RequestTooLarge' , value: 184 ,description: "The request message size exceeds limits set by the server."}, - Bad_ResponseTooLarge: { name: 'Bad_ResponseTooLarge' , value: 185 ,description: "The response message size exceeds limits set by the client."}, - Bad_UnknownResponse: { name: 'Bad_UnknownResponse' , value: 9 ,description: "An unrecognized response was received from the server."}, - Bad_Timeout: { name: 'Bad_Timeout' , value: 10 ,description: "The operation timed out."}, - Bad_ServiceUnsupported: { name: 'Bad_ServiceUnsupported' , value: 11 ,description: "The server does not support the requested service."}, - Bad_Shutdown: { name: 'Bad_Shutdown' , value: 12 ,description: "The operation was cancelled because the application is shutting down."}, - Bad_ServerNotConnected: { name: 'Bad_ServerNotConnected' , value: 13 ,description: "The operation could not complete because the client is not connected to the server."}, - Bad_ServerHalted: { name: 'Bad_ServerHalted' , value: 14 ,description: "The server has stopped and cannot process any requests."}, - Bad_NothingToDo: { name: 'Bad_NothingToDo' , value: 15 ,description: "There was nothing to do because the client passed a list of operations with no elements."}, - Bad_TooManyOperations: { name: 'Bad_TooManyOperations' , value: 16 ,description: "The request could not be processed because it specified too many operations."}, - Bad_DataTypeIdUnknown: { name: 'Bad_DataTypeIdUnknown' , value: 17 ,description: "The extension object cannot be (de)serialized because the data type id is not recognized."}, - Bad_CertificateInvalid: { name: 'Bad_CertificateInvalid' , value: 18 ,description: "The certificate provided as a parameter is not valid."}, - Bad_SecurityChecksFailed: { name: 'Bad_SecurityChecksFailed' , value: 19 ,description: "An error occurred verifying security."}, - Bad_CertificateTimeInvalid: { name: 'Bad_CertificateTimeInvalid' , value: 20 ,description: "The Certificate has expired or is not yet valid."}, - Bad_CertificateIssuerTimeInvalid: { name: 'Bad_CertificateIssuerTimeInvalid' , value: 21 ,description: "An Issuer Certificate has expired or is not yet valid."}, - Bad_CertificateHostNameInvalid: { name: 'Bad_CertificateHostNameInvalid' , value: 22 ,description: "The HostName used to connect to a Server does not match a HostName in the Certificate."}, - Bad_CertificateUriInvalid: { name: 'Bad_CertificateUriInvalid' , value: 23 ,description: "The URI specified in the ApplicationDescription does not match the URI in the Certificate."}, - Bad_CertificateUseNotAllowed: { name: 'Bad_CertificateUseNotAllowed' , value: 24 ,description: "The Certificate may not be used for the requested operation."}, - Bad_CertificateIssuerUseNotAllowed: { name: 'Bad_CertificateIssuerUseNotAllowed' , value: 25 ,description: "The Issuer Certificate may not be used for the requested operation."}, - Bad_CertificateUntrusted: { name: 'Bad_CertificateUntrusted' , value: 26 ,description: "The Certificate is not trusted."}, - Bad_CertificateRevocationUnknown: { name: 'Bad_CertificateRevocationUnknown' , value: 27 ,description: "It was not possible to determine if the Certificate has been revoked."}, - Bad_CertificateIssuerRevocationUnknown: { name: 'Bad_CertificateIssuerRevocationUnknown' , value: 28 ,description: "It was not possible to determine if the Issuer Certificate has been revoked."}, - Bad_CertificateRevoked: { name: 'Bad_CertificateRevoked' , value: 29 ,description: "The Certificate has been revoked."}, - Bad_CertificateIssuerRevoked: { name: 'Bad_CertificateIssuerRevoked' , value: 30 ,description: "The Issuer Certificate has been revoked."}, - Bad_UserAccessDenied: { name: 'Bad_UserAccessDenied' , value: 31 ,description: "User does not have permission to perform the requested operation."}, - Bad_IdentityTokenInvalid: { name: 'Bad_IdentityTokenInvalid' , value: 32 ,description: "The user identity token is not valid."}, - Bad_IdentityTokenRejected: { name: 'Bad_IdentityTokenRejected' , value: 33 ,description: "The user identity token is valid but the server has rejected it."}, - Bad_SecureChannelIdInvalid: { name: 'Bad_SecureChannelIdInvalid' , value: 34 ,description: "The specified secure channel is no longer valid."}, - Bad_InvalidTimestamp: { name: 'Bad_InvalidTimestamp' , value: 35 ,description: "The timestamp is outside the range allowed by the server."}, - Bad_NonceInvalid: { name: 'Bad_NonceInvalid' , value: 36 ,description: "The nonce does appear to be not a random value or it is not the correct length."}, - Bad_SessionIdInvalid: { name: 'Bad_SessionIdInvalid' , value: 37 ,description: "The session id is not valid."}, - Bad_SessionClosed: { name: 'Bad_SessionClosed' , value: 38 ,description: "The session was closed by the client."}, - Bad_SessionNotActivated: { name: 'Bad_SessionNotActivated' , value: 39 ,description: "The session cannot be used because ActivateSession has not been called."}, - Bad_SubscriptionIdInvalid: { name: 'Bad_SubscriptionIdInvalid' , value: 40 ,description: "The subscription id is not valid."}, - Bad_RequestHeaderInvalid: { name: 'Bad_RequestHeaderInvalid' , value: 42 ,description: "The header for the request is missing or invalid."}, - Bad_TimestampsToReturnInvalid: { name: 'Bad_TimestampsToReturnInvalid' , value: 43 ,description: "The timestamps to return parameter is invalid."}, - Bad_RequestCancelledByClient: { name: 'Bad_RequestCancelledByClient' , value: 44 ,description: "The request was cancelled by the client."}, - Good_SubscriptionTransferred: { name: 'Good_SubscriptionTransferred' , value: 45 ,description: "The subscription was transferred to another session."}, - Good_CompletesAsynchronously: { name: 'Good_CompletesAsynchronously' , value: 46 ,description: "The processing will complete asynchronously."}, - Good_Overload: { name: 'Good_Overload' , value: 47 ,description: "Sampling has slowed down due to resource limitations."}, - Good_Clamped: { name: 'Good_Clamped' , value: 48 ,description: "The value written was accepted but was clamped."}, - Bad_NoCommunication: { name: 'Bad_NoCommunication' , value: 49 ,description: "Communication with the data source is defined, but not established, and there is no last known value available."}, - Bad_WaitingForInitialData: { name: 'Bad_WaitingForInitialData' , value: 50 ,description: "Waiting for the server to obtain values from the underlying data source."}, - Bad_NodeIdInvalid: { name: 'Bad_NodeIdInvalid' , value: 51 ,description: "The syntax of the node id is not valid."}, - Bad_NodeIdUnknown: { name: 'Bad_NodeIdUnknown' , value: 52 ,description: "The node id refers to a node that does not exist in the server address space."}, - Bad_AttributeIdInvalid: { name: 'Bad_AttributeIdInvalid' , value: 53 ,description: "The attribute is not supported for the specified Node."}, - Bad_IndexRangeInvalid: { name: 'Bad_IndexRangeInvalid' , value: 54 ,description: "The syntax of the index range parameter is invalid."}, - Bad_IndexRangeNoData: { name: 'Bad_IndexRangeNoData' , value: 55 ,description: "No data exists within the range of indexes specified."}, - Bad_DataEncodingInvalid: { name: 'Bad_DataEncodingInvalid' , value: 56 ,description: "The data encoding is invalid."}, - Bad_DataEncodingUnsupported: { name: 'Bad_DataEncodingUnsupported' , value: 57 ,description: "The server does not support the requested data encoding for the node."}, - Bad_NotReadable: { name: 'Bad_NotReadable' , value: 58 ,description: "The access level does not allow reading or subscribing to the Node."}, - Bad_NotWritable: { name: 'Bad_NotWritable' , value: 59 ,description: "The access level does not allow writing to the Node."}, - Bad_OutOfRange: { name: 'Bad_OutOfRange' , value: 60 ,description: "The value was out of range."}, - Bad_NotSupported: { name: 'Bad_NotSupported' , value: 61 ,description: "The requested operation is not supported."}, - Bad_NotFound: { name: 'Bad_NotFound' , value: 62 ,description: "A requested item was not found or a search operation ended without success."}, - Bad_ObjectDeleted: { name: 'Bad_ObjectDeleted' , value: 63 ,description: "The object cannot be used because it has been deleted."}, - Bad_NotImplemented: { name: 'Bad_NotImplemented' , value: 64 ,description: "Requested operation is not implemented."}, - Bad_MonitoringModeInvalid: { name: 'Bad_MonitoringModeInvalid' , value: 65 ,description: "The monitoring mode is invalid."}, - Bad_MonitoredItemIdInvalid: { name: 'Bad_MonitoredItemIdInvalid' , value: 66 ,description: "The monitoring item id does not refer to a valid monitored item."}, - Bad_MonitoredItemFilterInvalid: { name: 'Bad_MonitoredItemFilterInvalid' , value: 67 ,description: "The monitored item filter parameter is not valid."}, - Bad_MonitoredItemFilterUnsupported: { name: 'Bad_MonitoredItemFilterUnsupported' , value: 68 ,description: "The server does not support the requested monitored item filter."}, - Bad_FilterNotAllowed: { name: 'Bad_FilterNotAllowed' , value: 69 ,description: "A monitoring filter cannot be used in combination with the attribute specified."}, - Bad_StructureMissing: { name: 'Bad_StructureMissing' , value: 70 ,description: "A mandatory structured parameter was missing or null."}, - Bad_EventFilterInvalid: { name: 'Bad_EventFilterInvalid' , value: 71 ,description: "The event filter is not valid."}, - Bad_ContentFilterInvalid: { name: 'Bad_ContentFilterInvalid' , value: 72 ,description: "The content filter is not valid."}, - Bad_FilterOperatorInvalid: { name: 'Bad_FilterOperatorInvalid' , value: 193 ,description: "An unregognized operator was provided in a filter."}, - Bad_FilterOperatorUnsupported: { name: 'Bad_FilterOperatorUnsupported' , value: 194 ,description: "A valid operator was provided, but the server does not provide support for this filter operator."}, - Bad_FilterOperandCountMismatch: { name: 'Bad_FilterOperandCountMismatch' , value: 195 ,description: "The number of operands provided for the filter operator was less then expected for the operand provided."}, - Bad_FilterOperandInvalid: { name: 'Bad_FilterOperandInvalid' , value: 73 ,description: "The operand used in a content filter is not valid."}, - Bad_FilterElementInvalid: { name: 'Bad_FilterElementInvalid' , value: 196 ,description: "The referenced element is not a valid element in the content filter."}, - Bad_FilterLiteralInvalid: { name: 'Bad_FilterLiteralInvalid' , value: 197 ,description: "The referenced literal is not a valid value."}, - Bad_ContinuationPointInvalid: { name: 'Bad_ContinuationPointInvalid' , value: 74 ,description: "The continuation point provide is longer valid."}, - Bad_NoContinuationPoints: { name: 'Bad_NoContinuationPoints' , value: 75 ,description: "The operation could not be processed because all continuation points have been allocated."}, - Bad_ReferenceTypeIdInvalid: { name: 'Bad_ReferenceTypeIdInvalid' , value: 76 ,description: "The operation could not be processed because all continuation points have been allocated."}, - Bad_BrowseDirectionInvalid: { name: 'Bad_BrowseDirectionInvalid' , value: 77 ,description: "The browse direction is not valid."}, - Bad_NodeNotInView: { name: 'Bad_NodeNotInView' , value: 78 ,description: "The node is not part of the view."}, - Bad_ServerUriInvalid: { name: 'Bad_ServerUriInvalid' , value: 79 ,description: "The ServerUri is not a valid URI."}, - Bad_ServerNameMissing: { name: 'Bad_ServerNameMissing' , value: 80 ,description: "No ServerName was specified."}, - Bad_DiscoveryUrlMissing: { name: 'Bad_DiscoveryUrlMissing' , value: 81 ,description: "No DiscoveryUrl was specified."}, - Bad_SempahoreFileMissing: { name: 'Bad_SempahoreFileMissing' , value: 82 ,description: "The semaphore file specified by the client is not valid."}, - Bad_RequestTypeInvalid: { name: 'Bad_RequestTypeInvalid' , value: 83 ,description: "The security token request type is not valid."}, - Bad_SecurityModeRejected: { name: 'Bad_SecurityModeRejected' , value: 84 ,description: "The security mode does not meet the requirements set by the Server."}, - Bad_SecurityPolicyRejected: { name: 'Bad_SecurityPolicyRejected' , value: 85 ,description: "The security policy does not meet the requirements set by the Server."}, - Bad_TooManySessions: { name: 'Bad_TooManySessions' , value: 86 ,description: "The server has reached its maximum number of sessions."}, - Bad_UserSignatureInvalid: { name: 'Bad_UserSignatureInvalid' , value: 87 ,description: "The user token signature is missing or invalid."}, - Bad_ApplicationSignatureInvalid: { name: 'Bad_ApplicationSignatureInvalid' , value: 88 ,description: "The signature generated with the client certificate is missing or invalid."}, - Bad_NoValidCertificates: { name: 'Bad_NoValidCertificates' , value: 89 ,description: "The client did not provide at least one software certificate that is valid and meets the profile requirements for the server."}, - Bad_IdentityChangeNotSupported: { name: 'Bad_IdentityChangeNotSupported' , value: 198 ,description: "The Server does not support changing the user identity assigned to the session."}, - Bad_RequestCancelledByRequest: { name: 'Bad_RequestCancelledByRequest' , value: 90 ,description: "The request was cancelled by the client with the Cancel service."}, - Bad_ParentNodeIdInvalid: { name: 'Bad_ParentNodeIdInvalid' , value: 91 ,description: "The parent node id does not to refer to a valid node."}, - Bad_ReferenceNotAllowed: { name: 'Bad_ReferenceNotAllowed' , value: 92 ,description: "The reference could not be created because it violates constraints imposed by the data model."}, - Bad_NodeIdRejected: { name: 'Bad_NodeIdRejected' , value: 93 ,description: "The requested node id was reject because it was either invalid or server does not allow node ids to be specified by the client."}, - Bad_NodeIdExists: { name: 'Bad_NodeIdExists' , value: 94 ,description: "The requested node id is already used by another node."}, - Bad_NodeClassInvalid: { name: 'Bad_NodeClassInvalid' , value: 95 ,description: "The node class is not valid."}, - Bad_BrowseNameInvalid: { name: 'Bad_BrowseNameInvalid' , value: 96 ,description: "The browse name is invalid."}, - Bad_BrowseNameDuplicated: { name: 'Bad_BrowseNameDuplicated' , value: 97 ,description: "The browse name is not unique among nodes that share the same relationship with the parent."}, - Bad_NodeAttributesInvalid: { name: 'Bad_NodeAttributesInvalid' , value: 98 ,description: "The node attributes are not valid for the node class."}, - Bad_TypeDefinitionInvalid: { name: 'Bad_TypeDefinitionInvalid' , value: 99 ,description: "The type definition node id does not reference an appropriate type node."}, - Bad_SourceNodeIdInvalid: { name: 'Bad_SourceNodeIdInvalid' , value: 100 ,description: "The source node id does not reference a valid node."}, - Bad_TargetNodeIdInvalid: { name: 'Bad_TargetNodeIdInvalid' , value: 101 ,description: "The target node id does not reference a valid node."}, - Bad_DuplicateReferenceNotAllowed: { name: 'Bad_DuplicateReferenceNotAllowed' , value: 102 ,description: "The reference type between the nodes is already defined."}, - Bad_InvalidSelfReference: { name: 'Bad_InvalidSelfReference' , value: 103 ,description: "The server does not allow this type of self reference on this node."}, - Bad_ReferenceLocalOnly: { name: 'Bad_ReferenceLocalOnly' , value: 104 ,description: "The reference type is not valid for a reference to a remote server."}, - Bad_NoDeleteRights: { name: 'Bad_NoDeleteRights' , value: 105 ,description: "The server will not allow the node to be deleted."}, - Uncertain_ReferenceNotDeleted: { name: 'Uncertain_ReferenceNotDeleted' , value: 188 ,description: "The server was not able to delete all target references."}, - Bad_ServerIndexInvalid: { name: 'Bad_ServerIndexInvalid' , value: 106 ,description: "The server index is not valid."}, - Bad_ViewIdUnknown: { name: 'Bad_ViewIdUnknown' , value: 107 ,description: "The view id does not refer to a valid view node."}, - Bad_ViewTimestampInvalid: { name: 'Bad_ViewTimestampInvalid' , value: 201 ,description: "The view timestamp is not available or not supported."}, - Bad_ViewParameterMismatch: { name: 'Bad_ViewParameterMismatch' , value: 202 ,description: "The view parameters are not consistent with each other."}, - Bad_ViewVersionInvalid: { name: 'Bad_ViewVersionInvalid' , value: 203 ,description: "The view version is not available or not supported."}, - Uncertain_NotAllNodesAvailable: { name: 'Uncertain_NotAllNodesAvailable' , value: 192 ,description: "The list of references may not be complete because the underlying system is not available."}, - Good_ResultsMayBeIncomplete: { name: 'Good_ResultsMayBeIncomplete' , value: 186 ,description: "The server should have followed a reference to a node in a remote server but did not. The result set may be incomplete."}, - Bad_NotTypeDefinition: { name: 'Bad_NotTypeDefinition' , value: 200 ,description: "The provided Nodeid was not a type definition nodeid."}, - Uncertain_ReferenceOutOfServer: { name: 'Uncertain_ReferenceOutOfServer' , value: 108 ,description: "One of the references to follow in the relative path references to a node in the address space in another server."}, - Bad_TooManyMatches: { name: 'Bad_TooManyMatches' , value: 109 ,description: "The requested operation has too many matches to return."}, - Bad_QueryTooComplex: { name: 'Bad_QueryTooComplex' , value: 110 ,description: "The requested operation requires too many resources in the server."}, - Bad_NoMatch: { name: 'Bad_NoMatch' , value: 111 ,description: "The requested operation has no match to return."}, - Bad_MaxAgeInvalid: { name: 'Bad_MaxAgeInvalid' , value: 112 ,description: "The max age parameter is invalid."}, - Bad_HistoryOperationInvalid: { name: 'Bad_HistoryOperationInvalid' , value: 113 ,description: "The history details parameter is not valid."}, - Bad_HistoryOperationUnsupported: { name: 'Bad_HistoryOperationUnsupported' , value: 114 ,description: "The server does not support the requested operation."}, - Bad_InvalidTimestampArgument: { name: 'Bad_InvalidTimestampArgument' , value: 189 ,description: "The defined timestamp to return was invalid."}, - Bad_WriteNotSupported: { name: 'Bad_WriteNotSupported' , value: 115 ,description: "The server not does support writing the combination of value, status and timestamps provided."}, - Bad_TypeMismatch: { name: 'Bad_TypeMismatch' , value: 116 ,description: "The value supplied for the attribute is not of the same type as the attribute's value."}, - Bad_MethodInvalid: { name: 'Bad_MethodInvalid' , value: 117 ,description: "The method id does not refer to a method for the specified object."}, - Bad_ArgumentsMissing: { name: 'Bad_ArgumentsMissing' , value: 118 ,description: "The client did not specify all of the input arguments for the method."}, - Bad_TooManySubscriptions: { name: 'Bad_TooManySubscriptions' , value: 119 ,description: "The server has reached its maximum number of subscriptions."}, - Bad_TooManyPublishRequests: { name: 'Bad_TooManyPublishRequests' , value: 120 ,description: "The server has reached the maximum number of queued publish requests."}, - Bad_NoSubscription: { name: 'Bad_NoSubscription' , value: 121 ,description: "There is no subscription available for this session."}, - Bad_SequenceNumberUnknown: { name: 'Bad_SequenceNumberUnknown' , value: 122 ,description: "The sequence number is unknown to the server."}, - Bad_MessageNotAvailable: { name: 'Bad_MessageNotAvailable' , value: 123 ,description: "The requested notification message is no longer available."}, - Bad_InsufficientClientProfile: { name: 'Bad_InsufficientClientProfile' , value: 124 ,description: "The Client of the current Session does not support one or more Profiles that are necessary for the Subscription."}, - Bad_StateNotActive: { name: 'Bad_StateNotActive' , value: 191 ,description: "The sub-state machine is not currently active."}, - Bad_TcpServerTooBusy: { name: 'Bad_TcpServerTooBusy' , value: 125 ,description: "The server cannot process the request because it is too busy."}, - Bad_TcpMessageTypeInvalid: { name: 'Bad_TcpMessageTypeInvalid' , value: 126 ,description: "The type of the message specified in the header invalid."}, - Bad_TcpSecureChannelUnknown: { name: 'Bad_TcpSecureChannelUnknown' , value: 127 ,description: "The SecureChannelId and/or TokenId are not currently in use."}, - Bad_TcpMessageTooLarge: { name: 'Bad_TcpMessageTooLarge' , value: 128 ,description: "The size of the message specified in the header is too large."}, - Bad_TcpNotEnoughResources: { name: 'Bad_TcpNotEnoughResources' , value: 129 ,description: "There are not enough resources to process the request."}, - Bad_TcpInternalError: { name: 'Bad_TcpInternalError' , value: 130 ,description: "An internal error occurred."}, - Bad_TcpEndpointUrlInvalid: { name: 'Bad_TcpEndpointUrlInvalid' , value: 131 ,description: "The Server does not recognize the QueryString specified."}, - Bad_RequestInterrupted: { name: 'Bad_RequestInterrupted' , value: 132 ,description: "The request could not be sent because of a network interruption."}, - Bad_RequestTimeout: { name: 'Bad_RequestTimeout' , value: 133 ,description: "Timeout occurred while processing the request."}, - Bad_SecureChannelClosed: { name: 'Bad_SecureChannelClosed' , value: 134 ,description: "The secure channel has been closed."}, - Bad_SecureChannelTokenUnknown: { name: 'Bad_SecureChannelTokenUnknown' , value: 135 ,description: "The token has expired or is not recognized."}, - Bad_SequenceNumberInvalid: { name: 'Bad_SequenceNumberInvalid' , value: 136 ,description: "The sequence number is not valid."}, - Bad_ProtocolVersionUnsupported: { name: 'Bad_ProtocolVersionUnsupported' , value: 190 ,description: "The applications do not have compatible protocol versions."}, - Bad_ConfigurationError: { name: 'Bad_ConfigurationError' , value: 137 ,description: "There is a problem with the configuration that affects the usefulness of the value."}, - Bad_NotConnected: { name: 'Bad_NotConnected' , value: 138 ,description: "The variable should receive its value from another variable, but has never been configured to do so."}, - Bad_DeviceFailure: { name: 'Bad_DeviceFailure' , value: 139 ,description: "There has been a failure in the device/data source that generates the value that has affected the value."}, - Bad_SensorFailure: { name: 'Bad_SensorFailure' , value: 140 ,description: "There has been a failure in the sensor from which the value is derived by the device/data source."}, - Bad_OutOfService: { name: 'Bad_OutOfService' , value: 141 ,description: "The source of the data is not operational."}, - Bad_DeadbandFilterInvalid: { name: 'Bad_DeadbandFilterInvalid' , value: 142 ,description: "The deadband filter is not valid."}, - Uncertain_NoCommunicationLastUsableValue: { name: 'Uncertain_NoCommunicationLastUsableValue' , value: 143 ,description: "Communication to the data source has failed. The variable value is the last value that had a good quality."}, - Uncertain_LastUsableValue: { name: 'Uncertain_LastUsableValue' , value: 144 ,description: "Whatever was updating this value has stopped doing so."}, - Uncertain_SubstituteValue: { name: 'Uncertain_SubstituteValue' , value: 145 ,description: "The value is an operational value that was manually overwritten."}, - Uncertain_InitialValue: { name: 'Uncertain_InitialValue' , value: 146 ,description: "The value is an initial value for a variable that normally receives its value from another variable."}, - Uncertain_SensorNotAccurate: { name: 'Uncertain_SensorNotAccurate' , value: 147 ,description: "The value is at one of the sensor limits."}, - Uncertain_EngineeringUnitsExceeded: { name: 'Uncertain_EngineeringUnitsExceeded' , value: 148 ,description: "The value is outside of the range of values defined for this parameter."}, - Uncertain_SubNormal: { name: 'Uncertain_SubNormal' , value: 149 ,description: "The value is derived from multiple sources and has less than the required number of Good sources."}, - Good_LocalOverride: { name: 'Good_LocalOverride' , value: 150 ,description: "The value has been overridden."}, - Bad_RefreshInProgress: { name: 'Bad_RefreshInProgress' , value: 151 ,description: "This Condition refresh failed, a Condition refresh operation is already in progress."}, - Bad_ConditionAlreadyDisabled: { name: 'Bad_ConditionAlreadyDisabled' , value: 152 ,description: "This condition has already been disabled."}, - Bad_ConditionAlreadyEnabled: { name: 'Bad_ConditionAlreadyEnabled' , value: 204 ,description: "This condition has already been enabled."}, - Bad_ConditionDisabled: { name: 'Bad_ConditionDisabled' , value: 153 ,description: "Property not available, this condition is disabled."}, - Bad_EventIdUnknown: { name: 'Bad_EventIdUnknown' , value: 154 ,description: "The specified event id is not recognized."}, - Bad_EventNotAcknowledgeable: { name: 'Bad_EventNotAcknowledgeable' , value: 187 ,description: "The event cannot be acknowledged."}, - Bad_DialogNotActive: { name: 'Bad_DialogNotActive' , value: 205 ,description: "The dialog condition is not active."}, - Bad_DialogResponseInvalid: { name: 'Bad_DialogResponseInvalid' , value: 206 ,description: "The response is not valid for the dialog."}, - Bad_ConditionBranchAlreadyAcked: { name: 'Bad_ConditionBranchAlreadyAcked' , value: 207 ,description: "The condition branch has already been acknowledged."}, - Bad_ConditionBranchAlreadyConfirmed: { name: 'Bad_ConditionBranchAlreadyConfirmed' , value: 208 ,description: "The condition branch has already been confirmed."}, - Bad_ConditionAlreadyShelved: { name: 'Bad_ConditionAlreadyShelved' , value: 209 ,description: "The condition has already been shelved."}, - Bad_ConditionNotShelved: { name: 'Bad_ConditionNotShelved' , value: 210 ,description: "The condition is not currently shelved."}, - Bad_ShelvingTimeOutOfRange: { name: 'Bad_ShelvingTimeOutOfRange' , value: 211 ,description: "The shelving time not within an acceptable range."}, - Bad_NoData: { name: 'Bad_NoData' , value: 155 ,description: "No data exists for the requested time range or event filter."}, - Bad_DataLost: { name: 'Bad_DataLost' , value: 157 ,description: "Data is missing due to collection started/stopped/lost."}, - Bad_DataUnavailable: { name: 'Bad_DataUnavailable' , value: 158 ,description: "Expected data is unavailable for the requested time range due to an un-mounted volume, an off-line archive or tape, or similar reason for temporary unavailability."}, - Bad_EntryExists: { name: 'Bad_EntryExists' , value: 159 ,description: "The data or event was not successfully inserted because a matching entry exists."}, - Bad_NoEntryExists: { name: 'Bad_NoEntryExists' , value: 160 ,description: "The data or event was not successfully updated because no matching entry exists."}, - Bad_TimestampNotSupported: { name: 'Bad_TimestampNotSupported' , value: 161 ,description: "The client requested history using a timestamp format the server does not support (i.e requested ServerTimestamp when server only supports SourceTimestamp)."}, - Good_EntryInserted: { name: 'Good_EntryInserted' , value: 162 ,description: "The data or event was successfully inserted into the historical database."}, - Good_EntryReplaced: { name: 'Good_EntryReplaced' , value: 163 ,description: "The data or event field was successfully replaced in the historical database."}, - Uncertain_DataSubNormal: { name: 'Uncertain_DataSubNormal' , value: 164 ,description: "The value is derived from multiple values and has less than the required number of Good values."}, - Good_NoData: { name: 'Good_NoData' , value: 165 ,description: "No data exists for the requested time range or event filter."}, - Good_MoreData: { name: 'Good_MoreData' , value: 166 ,description: "The data or event field was successfully replaced in the historical database."}, - Good_CommunicationEvent: { name: 'Good_CommunicationEvent' , value: 167 ,description: "The communication layer has raised an event."}, - Good_ShutdownEvent: { name: 'Good_ShutdownEvent' , value: 168 ,description: "The system is shutting down."}, - Good_CallAgain: { name: 'Good_CallAgain' , value: 169 ,description: "The operation is not finished and needs to be called again."}, - Good_NonCriticalTimeout: { name: 'Good_NonCriticalTimeout' , value: 170 ,description: "A non-critical timeout occurred."}, - Bad_InvalidArgument: { name: 'Bad_InvalidArgument' , value: 171 ,description: "One or more arguments are invalid."}, - Bad_ConnectionRejected: { name: 'Bad_ConnectionRejected' , value: 172 ,description: "Could not establish a network connection to remote server."}, - Bad_Disconnect: { name: 'Bad_Disconnect' , value: 173 ,description: "The server has disconnected from the client."}, - Bad_ConnectionClosed: { name: 'Bad_ConnectionClosed' , value: 174 ,description: "The network connection has been closed."}, - Bad_InvalidState: { name: 'Bad_InvalidState' , value: 175 ,description: "The operation cannot be completed because the object is closed, uninitialized or in some other invalid state."}, - Bad_EndOfStream: { name: 'Bad_EndOfStream' , value: 176 ,description: "Cannot move beyond end of the stream."}, - Bad_NoDataAvailable: { name: 'Bad_NoDataAvailable' , value: 177 ,description: "No data is currently available for reading from a non-blocking stream."}, - Bad_WaitingForResponse: { name: 'Bad_WaitingForResponse' , value: 178 ,description: "The asynchronous operation is waiting for a response."}, - Bad_OperationAbandoned: { name: 'Bad_OperationAbandoned' , value: 179 ,description: "The asynchronous operation was abandoned by the caller."}, - Bad_ExpectedStreamToBlock: { name: 'Bad_ExpectedStreamToBlock' , value: 180 ,description: "The stream did not return all data requested (possibly because it is a non-blocking stream)."}, - Bad_WouldBlock: { name: 'Bad_WouldBlock' , value: 181 ,description: "Non blocking behaviour is required and the operation would block."}, - Bad_SyntaxError: { name: 'Bad_SyntaxError' , value: 182 ,description: "A value had an invalid syntax."}, - Bad_MaxConnectionsReached: { name: 'Bad_MaxConnectionsReached' , value: 183 ,description: "The operation could not be finished because all available connections are in use."}, -}; + +var StatusCodes = require("./raw_status_codes").StatusCodes; +var _ = require("underscore"); +var assert= require("better-assert"); + + +function StatusCode(options) { + this.value = options.value; + this.description = options.description; + this.name = options.name; + this.highword = 0x8000 + this.value; +} +StatusCode.prototype.toString = function() { + return this.name +" (0x" + this.highword.toString(16) + "0000)" ; +} +exports.StatusCode = StatusCode; + + +var encodeStatusCode = function(statusCode,stream) +{ + assert(statusCode instanceof StatusCode); + stream.writeUInt16(0); + stream.writeUInt16(statusCode.highword); +} +exports.encodeStatusCode = encodeStatusCode; + +var decodeStatusCode = function(stream) +{ + var l = stream.readUInt16(); + var h = stream.readUInt16(); + var code = h & 0x3FFF; + + var sc = StatusCodes_reverse_map[code]; + if (!sc){ + console.log("code = ",code); + return StatusCodes_reverse_map[1]; + } + return sc; + +} +exports.decodeStatusCode = decodeStatusCode; + +/* +function makeStatusCode(statusCode, severity) { + if (typeof(statusCode) === "string" && statusCode.substr(0,2) === "0x") { + var a1 = "00000000" + statusCode.substr(2); + a1 = a1.substr(a1.length-8); + high = parseInt("0x"+a1.substr(0,4)); + low = parseInt("0x"+a1.substr(4,8)); + return [ low.toString(16),high.toString(16)] + } else { + var util = require("util"); + assert(isFinite(statusCode.value), "invalid status code provided " + util.inspect(statusCode)); + high = (statusCode.value | 0x8000); + low = 0; + //xx var b = new Buffer(8); + //xx b.writeUInt8(low ,0); + //xx b.writeUInt32LE(high,4); + //xx return b.toString("hex"); + return [ low.toString(16),high.toString(16)] + } +} +exports.makeStatusCode = makeStatusCode; + +*/ + +var StatusCodes_reverse_map = {}; +_.forEach(StatusCodes, function(code) { + code = new StatusCode(code); + StatusCodes_reverse_map[code.value] = code; + StatusCodes[code.name] = code; +}); +exports.StatusCodes = StatusCodes; diff --git a/lib/packet_analyzer.js b/lib/packet_analyzer.js index 63fd1aa2ca..129f638f70 100644 --- a/lib/packet_analyzer.js +++ b/lib/packet_analyzer.js @@ -104,7 +104,7 @@ function packet_analyzer(buffer, id, padding , offset) { console.log(str); str = pad() + (" length" ).green + " " + length; console.log(str); - assert(fieldType == "ExtensionObject"); + assert(fieldType === "ExtensionObject"); var o = start + stream.length packet_analyzer(ext_buf.slice(stream.length),value.encodingDefaultBinary,padding+5,start+stream.length ); } else { @@ -169,7 +169,7 @@ function messageHeaderToString(messageChunk) { var securityHeader = chooseSecurityHeader(messageHeader.msgType); var sequenceHeader = new SequenceHeader(); - assert(stream.length == 8); + assert(stream.length === 8); var secureChannelId = stream.readUInt32(); securityHeader.decode(stream); diff --git a/lib/raw_status_codes.js b/lib/raw_status_codes.js new file mode 100644 index 0000000000..64a18d94e0 --- /dev/null +++ b/lib/raw_status_codes.js @@ -0,0 +1,220 @@ +// this file has been automatically generated + exports.StatusCodes = { + Good: { name:'Good', value: 0, description:'No Error' } +, Bad_UnexpectedError: { name: 'Bad_UnexpectedError' , value: 1 ,description: "An unexpected error occurred."} +, Bad_InternalError: { name: 'Bad_InternalError' , value: 2 ,description: "An internal error occurred as a result of a programming or configuration error."} +, Bad_OutOfMemory: { name: 'Bad_OutOfMemory' , value: 3 ,description: "Not enough memory to complete the operation."} +, Bad_ResourceUnavailable: { name: 'Bad_ResourceUnavailable' , value: 4 ,description: "An operating system resource is not available."} +, Bad_CommunicationError: { name: 'Bad_CommunicationError' , value: 5 ,description: "A low level communication error occurred."} +, Bad_EncodingError: { name: 'Bad_EncodingError' , value: 6 ,description: "Encoding halted because of invalid data in the objects being serialized."} +, Bad_DecodingError: { name: 'Bad_DecodingError' , value: 7 ,description: "Decoding halted because of invalid data in the stream."} +, Bad_EncodingLimitsExceeded: { name: 'Bad_EncodingLimitsExceeded' , value: 8 ,description: "The message encoding/decoding limits imposed by the stack have been exceeded."} +, Bad_RequestTooLarge: { name: 'Bad_RequestTooLarge' , value: 184 ,description: "The request message size exceeds limits set by the server."} +, Bad_ResponseTooLarge: { name: 'Bad_ResponseTooLarge' , value: 185 ,description: "The response message size exceeds limits set by the client."} +, Bad_UnknownResponse: { name: 'Bad_UnknownResponse' , value: 9 ,description: "An unrecognized response was received from the server."} +, Bad_Timeout: { name: 'Bad_Timeout' , value: 10 ,description: "The operation timed out."} +, Bad_ServiceUnsupported: { name: 'Bad_ServiceUnsupported' , value: 11 ,description: "The server does not support the requested service."} +, Bad_Shutdown: { name: 'Bad_Shutdown' , value: 12 ,description: "The operation was cancelled because the application is shutting down."} +, Bad_ServerNotConnected: { name: 'Bad_ServerNotConnected' , value: 13 ,description: "The operation could not complete because the client is not connected to the server."} +, Bad_ServerHalted: { name: 'Bad_ServerHalted' , value: 14 ,description: "The server has stopped and cannot process any requests."} +, Bad_NothingToDo: { name: 'Bad_NothingToDo' , value: 15 ,description: "There was nothing to do because the client passed a list of operations with no elements."} +, Bad_TooManyOperations: { name: 'Bad_TooManyOperations' , value: 16 ,description: "The request could not be processed because it specified too many operations."} +, Bad_TooManyOperations: { name: 'Bad_TooManyOperations' , value: 16 ,description: "The request could not be processed because there are too many monitored items in the subscription."} +, Bad_DataTypeIdUnknown: { name: 'Bad_DataTypeIdUnknown' , value: 17 ,description: "The extension object cannot be (de)serialized because the data type id is not recognized."} +, Bad_CertificateInvalid: { name: 'Bad_CertificateInvalid' , value: 18 ,description: "The certificate provided as a parameter is not valid."} +, Bad_SecurityChecksFailed: { name: 'Bad_SecurityChecksFailed' , value: 19 ,description: "An error occurred verifying security."} +, Bad_CertificateTimeInvalid: { name: 'Bad_CertificateTimeInvalid' , value: 20 ,description: "The Certificate has expired or is not yet valid."} +, Bad_CertificateIssuerTimeInvalid: { name: 'Bad_CertificateIssuerTimeInvalid' , value: 21 ,description: "An Issuer Certificate has expired or is not yet valid."} +, Bad_CertificateHostNameInvalid: { name: 'Bad_CertificateHostNameInvalid' , value: 22 ,description: "The HostName used to connect to a Server does not match a HostName in the Certificate."} +, Bad_CertificateUriInvalid: { name: 'Bad_CertificateUriInvalid' , value: 23 ,description: "The URI specified in the ApplicationDescription does not match the URI in the Certificate."} +, Bad_CertificateUseNotAllowed: { name: 'Bad_CertificateUseNotAllowed' , value: 24 ,description: "The Certificate may not be used for the requested operation."} +, Bad_CertificateIssuerUseNotAllowed: { name: 'Bad_CertificateIssuerUseNotAllowed' , value: 25 ,description: "The Issuer Certificate may not be used for the requested operation."} +, Bad_CertificateUntrusted: { name: 'Bad_CertificateUntrusted' , value: 26 ,description: "The Certificate is not trusted."} +, Bad_CertificateRevocationUnknown: { name: 'Bad_CertificateRevocationUnknown' , value: 27 ,description: "It was not possible to determine if the Certificate has been revoked."} +, Bad_CertificateIssuerRevocationUnknown: { name: 'Bad_CertificateIssuerRevocationUnknown' , value: 28 ,description: "It was not possible to determine if the Issuer Certificate has been revoked."} +, Bad_CertificateRevoked: { name: 'Bad_CertificateRevoked' , value: 29 ,description: "The Certificate has been revoked."} +, Bad_CertificateIssuerRevoked: { name: 'Bad_CertificateIssuerRevoked' , value: 30 ,description: "The Issuer Certificate has been revoked."} +, Bad_UserAccessDenied: { name: 'Bad_UserAccessDenied' , value: 31 ,description: "User does not have permission to perform the requested operation."} +, Bad_IdentityTokenInvalid: { name: 'Bad_IdentityTokenInvalid' , value: 32 ,description: "The user identity token is not valid."} +, Bad_IdentityTokenRejected: { name: 'Bad_IdentityTokenRejected' , value: 33 ,description: "The user identity token is valid but the server has rejected it."} +, Bad_SecureChannelIdInvalid: { name: 'Bad_SecureChannelIdInvalid' , value: 34 ,description: "The specified secure channel is no longer valid."} +, Bad_InvalidTimestamp: { name: 'Bad_InvalidTimestamp' , value: 35 ,description: "The timestamp is outside the range allowed by the server."} +, Bad_NonceInvalid: { name: 'Bad_NonceInvalid' , value: 36 ,description: "The nonce does appear to be not a random value or it is not the correct length."} +, Bad_SessionIdInvalid: { name: 'Bad_SessionIdInvalid' , value: 37 ,description: "The session id is not valid."} +, Bad_SessionClosed: { name: 'Bad_SessionClosed' , value: 38 ,description: "The session was closed by the client."} +, Bad_SessionNotActivated: { name: 'Bad_SessionNotActivated' , value: 39 ,description: "The session cannot be used because ActivateSession has not been called."} +, Bad_SubscriptionIdInvalid: { name: 'Bad_SubscriptionIdInvalid' , value: 40 ,description: "The subscription id is not valid."} +, Bad_RequestHeaderInvalid: { name: 'Bad_RequestHeaderInvalid' , value: 42 ,description: "The header for the request is missing or invalid."} +, Bad_TimestampsToReturnInvalid: { name: 'Bad_TimestampsToReturnInvalid' , value: 43 ,description: "The timestamps to return parameter is invalid."} +, Bad_RequestCancelledByClient: { name: 'Bad_RequestCancelledByClient' , value: 44 ,description: "The request was cancelled by the client."} +, Good_SubscriptionTransferred: { name: 'Good_SubscriptionTransferred' , value: 45 ,description: "The subscription was transferred to another session."} +, Good_CompletesAsynchronously: { name: 'Good_CompletesAsynchronously' , value: 46 ,description: "The processing will complete asynchronously."} +, Good_Overload: { name: 'Good_Overload' , value: 47 ,description: "Sampling has slowed down due to resource limitations."} +, Good_Clamped: { name: 'Good_Clamped' , value: 48 ,description: "The value written was accepted but was clamped."} +, Bad_NoCommunication: { name: 'Bad_NoCommunication' , value: 49 ,description: "Communication with the data source is defined, but not established, and there is no last known value available."} +, Bad_WaitingForInitialData: { name: 'Bad_WaitingForInitialData' , value: 50 ,description: "Waiting for the server to obtain values from the underlying data source."} +, Bad_NodeIdInvalid: { name: 'Bad_NodeIdInvalid' , value: 51 ,description: "The syntax of the node id is not valid."} +, Bad_NodeIdUnknown: { name: 'Bad_NodeIdUnknown' , value: 52 ,description: "The node id refers to a node that does not exist in the server address space."} +, Bad_AttributeIdInvalid: { name: 'Bad_AttributeIdInvalid' , value: 53 ,description: "The attribute is not supported for the specified Node."} +, Bad_IndexRangeInvalid: { name: 'Bad_IndexRangeInvalid' , value: 54 ,description: "The syntax of the index range parameter is invalid."} +, Bad_IndexRangeNoData: { name: 'Bad_IndexRangeNoData' , value: 55 ,description: "No data exists within the range of indexes specified."} +, Bad_DataEncodingInvalid: { name: 'Bad_DataEncodingInvalid' , value: 56 ,description: "The data encoding is invalid."} +, Bad_DataEncodingUnsupported: { name: 'Bad_DataEncodingUnsupported' , value: 57 ,description: "The server does not support the requested data encoding for the node."} +, Bad_NotReadable: { name: 'Bad_NotReadable' , value: 58 ,description: "The access level does not allow reading or subscribing to the Node."} +, Bad_NotWritable: { name: 'Bad_NotWritable' , value: 59 ,description: "The access level does not allow writing to the Node."} +, Bad_OutOfRange: { name: 'Bad_OutOfRange' , value: 60 ,description: "The value was out of range."} +, Bad_NotSupported: { name: 'Bad_NotSupported' , value: 61 ,description: "The requested operation is not supported."} +, Bad_NotFound: { name: 'Bad_NotFound' , value: 62 ,description: "A requested item was not found or a search operation ended without success."} +, Bad_ObjectDeleted: { name: 'Bad_ObjectDeleted' , value: 63 ,description: "The object cannot be used because it has been deleted."} +, Bad_NotImplemented: { name: 'Bad_NotImplemented' , value: 64 ,description: "Requested operation is not implemented."} +, Bad_MonitoringModeInvalid: { name: 'Bad_MonitoringModeInvalid' , value: 65 ,description: "The monitoring mode is invalid."} +, Bad_MonitoredItemIdInvalid: { name: 'Bad_MonitoredItemIdInvalid' , value: 66 ,description: "The monitoring item id does not refer to a valid monitored item."} +, Bad_MonitoredItemFilterInvalid: { name: 'Bad_MonitoredItemFilterInvalid' , value: 67 ,description: "The monitored item filter parameter is not valid."} +, Bad_MonitoredItemFilterUnsupported: { name: 'Bad_MonitoredItemFilterUnsupported' , value: 68 ,description: "The server does not support the requested monitored item filter."} +, Bad_FilterNotAllowed: { name: 'Bad_FilterNotAllowed' , value: 69 ,description: "A monitoring filter cannot be used in combination with the attribute specified."} +, Bad_StructureMissing: { name: 'Bad_StructureMissing' , value: 70 ,description: "A mandatory structured parameter was missing or null."} +, Bad_EventFilterInvalid: { name: 'Bad_EventFilterInvalid' , value: 71 ,description: "The event filter is not valid."} +, Bad_ContentFilterInvalid: { name: 'Bad_ContentFilterInvalid' , value: 72 ,description: "The content filter is not valid."} +, Bad_FilterOperatorInvalid: { name: 'Bad_FilterOperatorInvalid' , value: 193 ,description: "An unregognized operator was provided in a filter."} +, Bad_FilterOperatorUnsupported: { name: 'Bad_FilterOperatorUnsupported' , value: 194 ,description: "A valid operator was provided, but the server does not provide support for this filter operator."} +, Bad_FilterOperandCountMismatch: { name: 'Bad_FilterOperandCountMismatch' , value: 195 ,description: "The number of operands provided for the filter operator was less then expected for the operand provided."} +, Bad_FilterOperandInvalid: { name: 'Bad_FilterOperandInvalid' , value: 73 ,description: "The operand used in a content filter is not valid."} +, Bad_FilterElementInvalid: { name: 'Bad_FilterElementInvalid' , value: 196 ,description: "The referenced element is not a valid element in the content filter."} +, Bad_FilterLiteralInvalid: { name: 'Bad_FilterLiteralInvalid' , value: 197 ,description: "The referenced literal is not a valid value."} +, Bad_ContinuationPointInvalid: { name: 'Bad_ContinuationPointInvalid' , value: 74 ,description: "The continuation point provide is longer valid."} +, Bad_NoContinuationPoints: { name: 'Bad_NoContinuationPoints' , value: 75 ,description: "The operation could not be processed because all continuation points have been allocated."} +, Bad_ReferenceTypeIdInvalid: { name: 'Bad_ReferenceTypeIdInvalid' , value: 76 ,description: "The operation could not be processed because all continuation points have been allocated."} +, Bad_BrowseDirectionInvalid: { name: 'Bad_BrowseDirectionInvalid' , value: 77 ,description: "The browse direction is not valid."} +, Bad_NodeNotInView: { name: 'Bad_NodeNotInView' , value: 78 ,description: "The node is not part of the view."} +, Bad_ServerUriInvalid: { name: 'Bad_ServerUriInvalid' , value: 79 ,description: "The ServerUri is not a valid URI."} +, Bad_ServerNameMissing: { name: 'Bad_ServerNameMissing' , value: 80 ,description: "No ServerName was specified."} +, Bad_DiscoveryUrlMissing: { name: 'Bad_DiscoveryUrlMissing' , value: 81 ,description: "No DiscoveryUrl was specified."} +, Bad_SempahoreFileMissing: { name: 'Bad_SempahoreFileMissing' , value: 82 ,description: "The semaphore file specified by the client is not valid."} +, Bad_RequestTypeInvalid: { name: 'Bad_RequestTypeInvalid' , value: 83 ,description: "The security token request type is not valid."} +, Bad_SecurityModeRejected: { name: 'Bad_SecurityModeRejected' , value: 84 ,description: "The security mode does not meet the requirements set by the Server."} +, Bad_SecurityPolicyRejected: { name: 'Bad_SecurityPolicyRejected' , value: 85 ,description: "The security policy does not meet the requirements set by the Server."} +, Bad_TooManySessions: { name: 'Bad_TooManySessions' , value: 86 ,description: "The server has reached its maximum number of sessions."} +, Bad_UserSignatureInvalid: { name: 'Bad_UserSignatureInvalid' , value: 87 ,description: "The user token signature is missing or invalid."} +, Bad_ApplicationSignatureInvalid: { name: 'Bad_ApplicationSignatureInvalid' , value: 88 ,description: "The signature generated with the client certificate is missing or invalid."} +, Bad_NoValidCertificates: { name: 'Bad_NoValidCertificates' , value: 89 ,description: "The client did not provide at least one software certificate that is valid and meets the profile requirements for the server."} +, Bad_IdentityChangeNotSupported: { name: 'Bad_IdentityChangeNotSupported' , value: 198 ,description: "The Server does not support changing the user identity assigned to the session."} +, Bad_RequestCancelledByRequest: { name: 'Bad_RequestCancelledByRequest' , value: 90 ,description: "The request was cancelled by the client with the Cancel service."} +, Bad_ParentNodeIdInvalid: { name: 'Bad_ParentNodeIdInvalid' , value: 91 ,description: "The parent node id does not to refer to a valid node."} +, Bad_ReferenceNotAllowed: { name: 'Bad_ReferenceNotAllowed' , value: 92 ,description: "The reference could not be created because it violates constraints imposed by the data model."} +, Bad_NodeIdRejected: { name: 'Bad_NodeIdRejected' , value: 93 ,description: "The requested node id was reject because it was either invalid or server does not allow node ids to be specified by the client."} +, Bad_NodeIdExists: { name: 'Bad_NodeIdExists' , value: 94 ,description: "The requested node id is already used by another node."} +, Bad_NodeClassInvalid: { name: 'Bad_NodeClassInvalid' , value: 95 ,description: "The node class is not valid."} +, Bad_BrowseNameInvalid: { name: 'Bad_BrowseNameInvalid' , value: 96 ,description: "The browse name is invalid."} +, Bad_BrowseNameDuplicated: { name: 'Bad_BrowseNameDuplicated' , value: 97 ,description: "The browse name is not unique among nodes that share the same relationship with the parent."} +, Bad_NodeAttributesInvalid: { name: 'Bad_NodeAttributesInvalid' , value: 98 ,description: "The node attributes are not valid for the node class."} +, Bad_TypeDefinitionInvalid: { name: 'Bad_TypeDefinitionInvalid' , value: 99 ,description: "The type definition node id does not reference an appropriate type node."} +, Bad_SourceNodeIdInvalid: { name: 'Bad_SourceNodeIdInvalid' , value: 100 ,description: "The source node id does not reference a valid node."} +, Bad_TargetNodeIdInvalid: { name: 'Bad_TargetNodeIdInvalid' , value: 101 ,description: "The target node id does not reference a valid node."} +, Bad_DuplicateReferenceNotAllowed: { name: 'Bad_DuplicateReferenceNotAllowed' , value: 102 ,description: "The reference type between the nodes is already defined."} +, Bad_InvalidSelfReference: { name: 'Bad_InvalidSelfReference' , value: 103 ,description: "The server does not allow this type of self reference on this node."} +, Bad_ReferenceLocalOnly: { name: 'Bad_ReferenceLocalOnly' , value: 104 ,description: "The reference type is not valid for a reference to a remote server."} +, Bad_NoDeleteRights: { name: 'Bad_NoDeleteRights' , value: 105 ,description: "The server will not allow the node to be deleted."} +, Uncertain_ReferenceNotDeleted: { name: 'Uncertain_ReferenceNotDeleted' , value: 188 ,description: "The server was not able to delete all target references."} +, Bad_ServerIndexInvalid: { name: 'Bad_ServerIndexInvalid' , value: 106 ,description: "The server index is not valid."} +, Bad_ViewIdUnknown: { name: 'Bad_ViewIdUnknown' , value: 107 ,description: "The view id does not refer to a valid view node."} +, Bad_ViewTimestampInvalid: { name: 'Bad_ViewTimestampInvalid' , value: 201 ,description: "The view timestamp is not available or not supported."} +, Bad_ViewParameterMismatch: { name: 'Bad_ViewParameterMismatch' , value: 202 ,description: "The view parameters are not consistent with each other."} +, Bad_ViewVersionInvalid: { name: 'Bad_ViewVersionInvalid' , value: 203 ,description: "The view version is not available or not supported."} +, Uncertain_NotAllNodesAvailable: { name: 'Uncertain_NotAllNodesAvailable' , value: 192 ,description: "The list of references may not be complete because the underlying system is not available."} +, Good_ResultsMayBeIncomplete: { name: 'Good_ResultsMayBeIncomplete' , value: 186 ,description: "The server should have followed a reference to a node in a remote server but did not. The result set may be incomplete."} +, Bad_NotTypeDefinition: { name: 'Bad_NotTypeDefinition' , value: 200 ,description: "The provided Nodeid was not a type definition nodeid."} +, Uncertain_ReferenceOutOfServer: { name: 'Uncertain_ReferenceOutOfServer' , value: 108 ,description: "One of the references to follow in the relative path references to a node in the address space in another server."} +, Bad_TooManyMatches: { name: 'Bad_TooManyMatches' , value: 109 ,description: "The requested operation has too many matches to return."} +, Bad_QueryTooComplex: { name: 'Bad_QueryTooComplex' , value: 110 ,description: "The requested operation requires too many resources in the server."} +, Bad_NoMatch: { name: 'Bad_NoMatch' , value: 111 ,description: "The requested operation has no match to return."} +, Bad_MaxAgeInvalid: { name: 'Bad_MaxAgeInvalid' , value: 112 ,description: "The max age parameter is invalid."} +, Bad_HistoryOperationInvalid: { name: 'Bad_HistoryOperationInvalid' , value: 113 ,description: "The history details parameter is not valid."} +, Bad_HistoryOperationUnsupported: { name: 'Bad_HistoryOperationUnsupported' , value: 114 ,description: "The server does not support the requested operation."} +, Bad_InvalidTimestampArgument: { name: 'Bad_InvalidTimestampArgument' , value: 189 ,description: "The defined timestamp to return was invalid."} +, Bad_WriteNotSupported: { name: 'Bad_WriteNotSupported' , value: 115 ,description: "The server not does support writing the combination of value, status and timestamps provided."} +, Bad_TypeMismatch: { name: 'Bad_TypeMismatch' , value: 116 ,description: "The value supplied for the attribute is not of the same type as the attribute's value."} +, Bad_MethodInvalid: { name: 'Bad_MethodInvalid' , value: 117 ,description: "The method id does not refer to a method for the specified object."} +, Bad_ArgumentsMissing: { name: 'Bad_ArgumentsMissing' , value: 118 ,description: "The client did not specify all of the input arguments for the method."} +, Bad_TooManySubscriptions: { name: 'Bad_TooManySubscriptions' , value: 119 ,description: "The server has reached its maximum number of subscriptions."} +, Bad_TooManyPublishRequests: { name: 'Bad_TooManyPublishRequests' , value: 120 ,description: "The server has reached the maximum number of queued publish requests."} +, Bad_NoSubscription: { name: 'Bad_NoSubscription' , value: 121 ,description: "There is no subscription available for this session."} +, Bad_SequenceNumberUnknown: { name: 'Bad_SequenceNumberUnknown' , value: 122 ,description: "The sequence number is unknown to the server."} +, Bad_MessageNotAvailable: { name: 'Bad_MessageNotAvailable' , value: 123 ,description: "The requested notification message is no longer available."} +, Bad_InsufficientClientProfile: { name: 'Bad_InsufficientClientProfile' , value: 124 ,description: "The Client of the current Session does not support one or more Profiles that are necessary for the Subscription."} +, Bad_StateNotActive: { name: 'Bad_StateNotActive' , value: 191 ,description: "The sub-state machine is not currently active."} +, Bad_TcpServerTooBusy: { name: 'Bad_TcpServerTooBusy' , value: 125 ,description: "The server cannot process the request because it is too busy."} +, Bad_TcpMessageTypeInvalid: { name: 'Bad_TcpMessageTypeInvalid' , value: 126 ,description: "The type of the message specified in the header invalid."} +, Bad_TcpSecureChannelUnknown: { name: 'Bad_TcpSecureChannelUnknown' , value: 127 ,description: "The SecureChannelId and/or TokenId are not currently in use."} +, Bad_TcpMessageTooLarge: { name: 'Bad_TcpMessageTooLarge' , value: 128 ,description: "The size of the message specified in the header is too large."} +, Bad_TcpNotEnoughResources: { name: 'Bad_TcpNotEnoughResources' , value: 129 ,description: "There are not enough resources to process the request."} +, Bad_TcpInternalError: { name: 'Bad_TcpInternalError' , value: 130 ,description: "An internal error occurred."} +, Bad_TcpEndpointUrlInvalid: { name: 'Bad_TcpEndpointUrlInvalid' , value: 131 ,description: "The Server does not recognize the QueryString specified."} +, Bad_RequestInterrupted: { name: 'Bad_RequestInterrupted' , value: 132 ,description: "The request could not be sent because of a network interruption."} +, Bad_RequestTimeout: { name: 'Bad_RequestTimeout' , value: 133 ,description: "Timeout occurred while processing the request."} +, Bad_SecureChannelClosed: { name: 'Bad_SecureChannelClosed' , value: 134 ,description: "The secure channel has been closed."} +, Bad_SecureChannelTokenUnknown: { name: 'Bad_SecureChannelTokenUnknown' , value: 135 ,description: "The token has expired or is not recognized."} +, Bad_SequenceNumberInvalid: { name: 'Bad_SequenceNumberInvalid' , value: 136 ,description: "The sequence number is not valid."} +, Bad_ProtocolVersionUnsupported: { name: 'Bad_ProtocolVersionUnsupported' , value: 190 ,description: "The applications do not have compatible protocol versions."} +, Bad_ConfigurationError: { name: 'Bad_ConfigurationError' , value: 137 ,description: "There is a problem with the configuration that affects the usefulness of the value."} +, Bad_NotConnected: { name: 'Bad_NotConnected' , value: 138 ,description: "The variable should receive its value from another variable, but has never been configured to do so."} +, Bad_DeviceFailure: { name: 'Bad_DeviceFailure' , value: 139 ,description: "There has been a failure in the device/data source that generates the value that has affected the value."} +, Bad_SensorFailure: { name: 'Bad_SensorFailure' , value: 140 ,description: "There has been a failure in the sensor from which the value is derived by the device/data source."} +, Bad_OutOfService: { name: 'Bad_OutOfService' , value: 141 ,description: "The source of the data is not operational."} +, Bad_DeadbandFilterInvalid: { name: 'Bad_DeadbandFilterInvalid' , value: 142 ,description: "The deadband filter is not valid."} +, Uncertain_NoCommunicationLastUsableValue: { name: 'Uncertain_NoCommunicationLastUsableValue' , value: 143 ,description: "Communication to the data source has failed. The variable value is the last value that had a good quality."} +, Uncertain_LastUsableValue: { name: 'Uncertain_LastUsableValue' , value: 144 ,description: "Whatever was updating this value has stopped doing so."} +, Uncertain_SubstituteValue: { name: 'Uncertain_SubstituteValue' , value: 145 ,description: "The value is an operational value that was manually overwritten."} +, Uncertain_InitialValue: { name: 'Uncertain_InitialValue' , value: 146 ,description: "The value is an initial value for a variable that normally receives its value from another variable."} +, Uncertain_SensorNotAccurate: { name: 'Uncertain_SensorNotAccurate' , value: 147 ,description: "The value is at one of the sensor limits."} +, Uncertain_EngineeringUnitsExceeded: { name: 'Uncertain_EngineeringUnitsExceeded' , value: 148 ,description: "The value is outside of the range of values defined for this parameter."} +, Uncertain_SubNormal: { name: 'Uncertain_SubNormal' , value: 149 ,description: "The value is derived from multiple sources and has less than the required number of Good sources."} +, Good_LocalOverride: { name: 'Good_LocalOverride' , value: 150 ,description: "The value has been overridden."} +, Bad_RefreshInProgress: { name: 'Bad_RefreshInProgress' , value: 151 ,description: "This Condition refresh failed, a Condition refresh operation is already in progress."} +, Bad_ConditionAlreadyDisabled: { name: 'Bad_ConditionAlreadyDisabled' , value: 152 ,description: "This condition has already been disabled."} +, Bad_ConditionAlreadyEnabled: { name: 'Bad_ConditionAlreadyEnabled' , value: 204 ,description: "This condition has already been enabled."} +, Bad_ConditionDisabled: { name: 'Bad_ConditionDisabled' , value: 153 ,description: "Property not available, this condition is disabled."} +, Bad_EventIdUnknown: { name: 'Bad_EventIdUnknown' , value: 154 ,description: "The specified event id is not recognized."} +, Bad_EventNotAcknowledgeable: { name: 'Bad_EventNotAcknowledgeable' , value: 187 ,description: "The event cannot be acknowledged."} +, Bad_DialogNotActive: { name: 'Bad_DialogNotActive' , value: 205 ,description: "The dialog condition is not active."} +, Bad_DialogResponseInvalid: { name: 'Bad_DialogResponseInvalid' , value: 206 ,description: "The response is not valid for the dialog."} +, Bad_ConditionBranchAlreadyAcked: { name: 'Bad_ConditionBranchAlreadyAcked' , value: 207 ,description: "The condition branch has already been acknowledged."} +, Bad_ConditionBranchAlreadyConfirmed: { name: 'Bad_ConditionBranchAlreadyConfirmed' , value: 208 ,description: "The condition branch has already been confirmed."} +, Bad_ConditionAlreadyShelved: { name: 'Bad_ConditionAlreadyShelved' , value: 209 ,description: "The condition has already been shelved."} +, Bad_ConditionNotShelved: { name: 'Bad_ConditionNotShelved' , value: 210 ,description: "The condition is not currently shelved."} +, Bad_ShelvingTimeOutOfRange: { name: 'Bad_ShelvingTimeOutOfRange' , value: 211 ,description: "The shelving time not within an acceptable range."} +, Bad_NoData: { name: 'Bad_NoData' , value: 155 ,description: "No data exists for the requested time range or event filter."} +, Bad_NoData: { name: 'Bad_NoData' , value: 155 ,description: "No data found to provide upper or lower bound value."} +, Bad_NoData: { name: 'Bad_NoData' , value: 155 ,description: "The server cannot retrieve a bound for the variable."} +, Bad_DataLost: { name: 'Bad_DataLost' , value: 157 ,description: "Data is missing due to collection started/stopped/lost."} +, Bad_DataUnavailable: { name: 'Bad_DataUnavailable' , value: 158 ,description: "Expected data is unavailable for the requested time range due to an un-mounted volume, an off-line archive or tape, or similar reason for temporary unavailability."} +, Bad_EntryExists: { name: 'Bad_EntryExists' , value: 159 ,description: "The data or event was not successfully inserted because a matching entry exists."} +, Bad_NoEntryExists: { name: 'Bad_NoEntryExists' , value: 160 ,description: "The data or event was not successfully updated because no matching entry exists."} +, Bad_TimestampNotSupported: { name: 'Bad_TimestampNotSupported' , value: 161 ,description: "The client requested history using a timestamp format the server does not support (i.e requested ServerTimestamp when server only supports SourceTimestamp)."} +, Good_EntryInserted: { name: 'Good_EntryInserted' , value: 162 ,description: "The data or event was successfully inserted into the historical database."} +, Good_EntryReplaced: { name: 'Good_EntryReplaced' , value: 163 ,description: "The data or event field was successfully replaced in the historical database."} +, Uncertain_DataSubNormal: { name: 'Uncertain_DataSubNormal' , value: 164 ,description: "The value is derived from multiple values and has less than the required number of Good values."} +, Good_NoData: { name: 'Good_NoData' , value: 165 ,description: "No data exists for the requested time range or event filter."} +, Good_MoreData: { name: 'Good_MoreData' , value: 166 ,description: "The data or event field was successfully replaced in the historical database."} +, Good_MoreData: { name: 'Good_MoreData' , value: 166 ,description: "The requested number of Aggregates does not match the requested number of NodeIds."} +, Good_MoreData: { name: 'Good_MoreData' , value: 166 ,description: "The requested Aggregate is not support by the server."} +, Good_MoreData: { name: 'Good_MoreData' , value: 166 ,description: "The aggregate value could not be derived due to invalid data inputs."} +, Good_MoreData: { name: 'Good_MoreData' , value: 166 ,description: "The aggregate configuration is not valid for specified node."} +, Good_MoreData: { name: 'Good_MoreData' , value: 166 ,description: "The request pecifies fields which are not valid for the EventType or cannot be saved by the historian."} +, Good_CommunicationEvent: { name: 'Good_CommunicationEvent' , value: 167 ,description: "The communication layer has raised an event."} +, Good_ShutdownEvent: { name: 'Good_ShutdownEvent' , value: 168 ,description: "The system is shutting down."} +, Good_CallAgain: { name: 'Good_CallAgain' , value: 169 ,description: "The operation is not finished and needs to be called again."} +, Good_NonCriticalTimeout: { name: 'Good_NonCriticalTimeout' , value: 170 ,description: "A non-critical timeout occurred."} +, Bad_InvalidArgument: { name: 'Bad_InvalidArgument' , value: 171 ,description: "One or more arguments are invalid."} +, Bad_ConnectionRejected: { name: 'Bad_ConnectionRejected' , value: 172 ,description: "Could not establish a network connection to remote server."} +, Bad_Disconnect: { name: 'Bad_Disconnect' , value: 173 ,description: "The server has disconnected from the client."} +, Bad_ConnectionClosed: { name: 'Bad_ConnectionClosed' , value: 174 ,description: "The network connection has been closed."} +, Bad_InvalidState: { name: 'Bad_InvalidState' , value: 175 ,description: "The operation cannot be completed because the object is closed, uninitialized or in some other invalid state."} +, Bad_EndOfStream: { name: 'Bad_EndOfStream' , value: 176 ,description: "Cannot move beyond end of the stream."} +, Bad_NoDataAvailable: { name: 'Bad_NoDataAvailable' , value: 177 ,description: "No data is currently available for reading from a non-blocking stream."} +, Bad_WaitingForResponse: { name: 'Bad_WaitingForResponse' , value: 178 ,description: "The asynchronous operation is waiting for a response."} +, Bad_OperationAbandoned: { name: 'Bad_OperationAbandoned' , value: 179 ,description: "The asynchronous operation was abandoned by the caller."} +, Bad_ExpectedStreamToBlock: { name: 'Bad_ExpectedStreamToBlock' , value: 180 ,description: "The stream did not return all data requested (possibly because it is a non-blocking stream)."} +, Bad_WouldBlock: { name: 'Bad_WouldBlock' , value: 181 ,description: "Non blocking behaviour is required and the operation would block."} +, Bad_SyntaxError: { name: 'Bad_SyntaxError' , value: 182 ,description: "A value had an invalid syntax."} +, Bad_MaxConnectionsReached: { name: 'Bad_MaxConnectionsReached' , value: 183 ,description: "The operation could not be finished because all available connections are in use."} +}; diff --git a/lib/secure_channel_service.js b/lib/secure_channel_service.js index 6470c8a934..339f06c19c 100644 --- a/lib/secure_channel_service.js +++ b/lib/secure_channel_service.js @@ -290,7 +290,7 @@ MessageChunker.prototype.chunkSecureMessage = function(msgType,options,message,m r.push(null); var securityHeader; - if (msgType == "OPN") { + if (msgType === "OPN") { securityHeader = makeAlgorithmSecurityHeader(); } else { securityHeader = new SymmetricAlgorithmSecurityHeader({ diff --git a/lib/server/server_endpoint.js b/lib/server/server_endpoint.js index e2538b526f..2df0bcab0c 100644 --- a/lib/server/server_endpoint.js +++ b/lib/server/server_endpoint.js @@ -104,9 +104,9 @@ OPCUAServerEndPoint.prototype.endpointDescription = function () { { policyId: "0", tokenType: s.UserIdentityTokenType.ANONYMOUS, - issuedTokenType: "", - issuerEndpointUrl: "", - securityPolicyUri: "" + issuedTokenType: null, + issuerEndpointUrl: null, + securityPolicyUri: null } ], transportProfileUri: "http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary", diff --git a/lib/server/server_engine.js b/lib/server/server_engine.js index 5a0f0450c5..256df94a2f 100644 --- a/lib/server/server_engine.js +++ b/lib/server/server_engine.js @@ -1,4 +1,3 @@ - var NodeClass = require("../../lib/browse_service").NodeClass; var NodeId = require("../../lib/nodeid").NodeId; @@ -7,7 +6,12 @@ var makeNodeId = require("../../lib/nodeid").makeNodeId; var assert = require('better-assert'); var s = require("../../lib/structures"); var browse_service = require("../../lib/browse_service"); + var read_service = require("../../lib/read_service"); +var DataValue = require("../datavalue").DataValue; +var Variant = require("../variant").Variant; +var DataType = require("../variant").DataType; +var AttributeIds = read_service.AttributeIds; var BrowseDirection = browse_service.BrowseDirection; var util = require("util"); @@ -16,15 +20,37 @@ var HasTypeDefinition = resolveNodeId("i=40"); var StatusCodes = require("../../lib/opcua_status_code").StatusCodes; +function coerceQualifyName(value) { - -function BaseClass() { - + if (!value) { + return null; + } + if (typeof value === "string") { + return { namespaceIndex: 0, name: value}; + } + assert(value.hasOwnProperty("namespaceIndex")); + assert(value.hasOwnProperty("name")); + return value; } -function BaseObject(options) { +function coerceLocalizedText(value) { + if (typeof value === "string") { + return { locale: null, text: value}; + }; + console.log("value " , value); + assert(value.hasOwnProperty("locale")); + assert(value.hasOwnProperty("text")); + return value; +} - BaseClass.apply(this,arguments); +/** + * BaseNode is the base class for all the OPCUA objects in the address space + * It provides attributes and a set of references to other nodes. + * + * @param options + * @constructor + */ +function BaseNode(options) { this.nodeId = resolveNodeId(options.nodeId); @@ -34,35 +60,174 @@ function BaseObject(options) { this.displayName = []; if (typeof options.displayName === "string") { - this.displayName.push(new s.LocalizedText({ locale: "en", text: options.displayName })); + this.displayName.push(new s.LocalizedText({ locale: null, text: options.displayName })); } - this.references = []; this.back_references = []; - } -util.inherits(BaseObject, BaseClass); -BaseObject.prototype._add_forward_reference = function(referenceTypeId,nodeId) { +BaseNode.prototype._add_forward_reference = function (referenceTypeId, nodeId) { this.references.push({ - referenceTypeId:referenceTypeId, + referenceTypeId: referenceTypeId, nodeId: nodeId }); }; -BaseObject.prototype._add_backward_reference = function(referenceTypeId,nodeId) { - +BaseNode.prototype._add_backward_reference = function (referenceTypeId, nodeId) { this.back_references.push({ - referenceTypeId:referenceTypeId, + referenceTypeId: referenceTypeId, nodeId: nodeId }); +}; + +BaseNode.prototype.readAttribute = function (attributeId) { + + var options = {}; + options.statusCode = StatusCodes.Good; + switch (attributeId) { + case AttributeIds.NodeId: // NodeId + options.value = { dataType: DataType.NodeId, value: this.nodeId } + break; + case AttributeIds.NodeClass: // NodeClass + assert(isFinite(this.nodeClass.value)); + options.value = { dataType: DataType.UInt32, value: this.nodeClass.value } + break; + case AttributeIds.BrowseName: // QualifiedName + // QualifiedName + options.value = { dataType: DataType.QualifiedName, value: { name: this.browseName, namespaceIndex: 0 } }; + break; + case AttributeIds.DisplayName: // LocalizedText + options.value = { dataType: DataType.LocalizedText, value: this.displayName[0] }; + break; + case AttributeIds.Description: // LocalizedText + options.value = { dataType: DataType.LocalizedText, value: { locale: null , text: ""} }; + break; + + case AttributeIds.WriteMask: + console.log(" warning WriteMask not implemented " + this.nodeId.toString()); + options.value = { dataType: DataType.UInt32, value: 0 }; + break; + + case AttributeIds.UserWriteMask: + console.log(" warning UserWriteMask not implemented " + this.nodeId.toString()); + options.value = { dataType: DataType.UInt32, value: 0 }; + break; + default: + options.statusCode = StatusCodes.Bad_AttributeIdInvalid; + break; + } + return new DataValue(options); +}; + +/** + * + * @param options + * @constructor + */ +function ReferenceType(options) { + BaseNode.apply(this, arguments); + this.isAbstract = (options.isAbstract === null) ? false : options.isAbstract; + this.symmetric = (options.symmetric === null) ? false : options.symmetric; + this.inverseName = coerceLocalizedText(options.inverseName); +} +util.inherits(ReferenceType, BaseNode); +ReferenceType.prototype.nodeClass = NodeClass.ReferenceType; + +ReferenceType.prototype.readAttribute = function (attributeId) { + + var options = {}; + switch (attributeId) { + case AttributeIds.IsAbstract: + options.value = { dataType: DataType.Boolean, value: this.isAbstract ? true : false }; + break; + case AttributeIds.Symmetric: + options.value = { dataType: DataType.Boolean, value: this.symmetric ? true : false }; + break; + case AttributeIds.InverseName: // LocalizedText + options.value = { dataType: DataType.LocalizedText, value: this.inverseName }; + break; + default: + return BaseNode.prototype.readAttribute.call(this,attributeId); + } + return new DataValue(options); }; +/** + * + * @param options + * @constructor + */ +function ObjectType(options) { + BaseNode.apply(this, arguments); + // + this.isAbstract = (options.isAbstract === null) ? false : options.isAbstract; +} +util.inherits(ObjectType, BaseNode); +ObjectType.prototype.nodeClass = NodeClass.ObjectType; + +ObjectType.prototype.readAttribute = function (attributeId) { + var options = {} + switch (attributeId) { + case AttributeIds.IsAbstract: + options.value = { dataType: DataType.Boolean, value: this.isAbstract ? true : false }; + break; + default: + return BaseNode.prototype.readAttribute.call(this,attributeId); + } + return new DataValue(options); +}; + +/** + * + * @param options + * @constructor + */ +function BaseObject(options) { + BaseNode.apply(this, arguments); + this.eventNotifier = options.eventNotifier || 0; +} + +util.inherits(BaseObject, BaseNode); BaseObject.prototype.nodeClass = NodeClass.Object; BaseObject.typeDefinition = resolveNodeId("BaseObjectType"); +BaseObject.prototype.readAttribute = function (attributeId) { + var options = {}; + switch (attributeId) { + case AttributeIds.EventNotifier: + options.value = { dataType: DataType.UInt32, value: this.eventNotifier }; + break; + default: + return BaseNode.prototype.readAttribute.call(this,attributeId); + } + return new DataValue(options); +}; + +function View(options) { + BaseNode.apply(this, arguments); + this.containsNoLoops = options.containsNoLoops ? true : false; + this.eventNotifier = 0; +} +util.inherits(View, BaseNode); +View.prototype.nodeClass = NodeClass.View; + +View.prototype.readAttribute = function (attributeId) { + + var options = {}; + + switch (attributeId) { + case AttributeIds.EventNotifier: + options.value = { dataType: DataType.UInt32, value: this.eventNotifier }; + break; + case AttributeIds.ContainsNoLoops: + options.value = { dataType: DataType.Boolean, value: this.containsNoLoops }; + default: + return BaseNode.prototype.readAttribute.call(this,attributeId); + } + return new DataValue(options); +}; function Folder(options) { @@ -70,7 +235,7 @@ function Folder(options) { assert(options.nodeId); assert(options.browseName); - BaseObject.apply(this,arguments); + BaseObject.apply(this, arguments); assert(this.typeDefinition.value === 61); @@ -78,25 +243,157 @@ function Folder(options) { } util.inherits(Folder, BaseObject); - var _constructors = {}; -function registerConstructor(ConstructorFunc,nodeId) { +function registerConstructor(ConstructorFunc, nodeId) { ConstructorFunc.prototype.typeDefinition = resolveNodeId(nodeId); _constructors[ConstructorFunc.prototype.typeDefinition.toString()] = ConstructorFunc; } -registerConstructor(Folder,"FolderType"); +registerConstructor(Folder, "FolderType"); + +function VariableType(options) { + + assert(options.dataType, "dataType is mandatory"); + this.value = options.value; // optional default value for instances of this VariableType + this.dataType = options.dataType; // DataType (NodeId) + this.valueRank = options.valueRank; // UInt32 + this.arrayDimensions = []; + this.isAbstract = options.isAbstract; // false indicates that the VariableType cannot be used as type definition +} +util.inherits(VariableType, BaseNode); + +VariableType.prototype.readAttribute = function (attributeId) { + var options = {} + switch (attributeId) { + case AttributeIds.IsAbstract: + options.value = { dataType: DataType.Boolean, value: this.isAbstract ? true : false }; + break; + case AttributeIds.Value: + if (this.hasOwnProperty("value")) { + assert(this.value._schema.name === "Variant"); + options.value = this.value; + } else { + console.log(" warning Value not implemented"); + options.value = { dataType: DataType.UInt32, value: 0 }; + options.statusCode = StatusCodes.Bad_AttributeIdInvalid; + } + break; + case AttributeIds.DataType: + options.value = { dataType: DataType.NodeId, value: this.dataType }; + break; + case AttributeIds.ValueRank: + options.value = { dataType: DataType.UInt32, value: this.valueRank }; + break; + case AttributeIds.ArrayDimensions: + options.value = { dataType: DataType.UInt32, value: this.arrayDimensions }; + break; + default: + return BaseNode.prototype.readAttribute.call(this,attributeId); + } + return new DataValue(options); +}; function Variable(options) { - BaseObject.apply(this,arguments); + BaseNode.apply(this, arguments); - assert(this.typeDefinition.value == resolveNodeId("VariableType").value); + assert(this.typeDefinition.value === resolveNodeId("VariableType").value); this.value = options.value; } -util.inherits(Variable, BaseObject); -registerConstructor(Variable,"VariableType"); + +util.inherits(Variable, BaseNode); +registerConstructor(Variable, "VariableType"); + +Variable.prototype.readAttribute = function (attributeId) { + + var options = {}; + + switch (attributeId) { + case AttributeIds.Value: + if (obj.hasOwnProperty("value")) { + assert(this.value._schema.name === "Variant"); + options.value = this.value; + } else { + console.log(" warning Value not implemented"); + options.value = { dataType: DataType.UInt32, value: 0 }; + options.statusCode = StatusCodes.Bad_AttributeIdInvalid; + } + break; + case AttributeIds.DataType: + console.log(" warning DataType not implemented"); + options.value = { dataType: DataType.NodeId, value: ec.makeNodeId(0) }; + options.statusCode = StatusCodes.Bad_AttributeIdInvalid; + break; + case AttributeIds.ValueRank: + console.log(" warning ValueRank not implemented"); + options.value = { dataType: DataType.UInt32, value: 0 }; + options.statusCode = StatusCodes.Bad_AttributeIdInvalid; + break; + case AttributeIds.ArrayDimensions: + console.log(" warning ValueRank not implemented"); + options.value = { dataType: DataType.UInt32, value: 0 }; + options.statusCode = StatusCodes.Bad_AttributeIdInvalid; + break; + case AttributeIds.AccessLevel: + console.log(" warning AccessLevel not implemented"); + options.value = { dataType: DataType.UInt32, value: 0 }; + options.statusCode = StatusCodes.Bad_AttributeIdInvalid; + break; + case AttributeIds.UserAccessLevel: + console.log(" warning UserAccessLevel not implemented"); + options.value = { dataType: DataType.UInt32, value: 0 }; + options.statusCode = StatusCodes.Bad_AttributeIdInvalid; + break; + case AttributeIds.MinimumSamplingInterval: + console.log(" warning MinimumSamplingInterval not implemented"); + options.value = { dataType: DataType.UInt32, value: 0 }; + options.statusCode = StatusCodes.Bad_AttributeIdInvalid; + break; + case AttributeIds.Historizing: + console.log(" warning Historizing not implemented"); + options.value = { dataType: DataType.UInt32, value: 0 }; + options.statusCode = StatusCodes.Bad_AttributeIdInvalid; + break; + default: + return BaseNode.prototype.readAttribute.call(this,attributeId); + } + return new DataValue(options); + + +}; + + +function Method(options) { + + BaseNode.apply(this, arguments); + + assert(this.typeDefinition.value === resolveNodeId("MethodType").value); + + this.value = options.value; +} +util.inherits(Method, BaseNode); +registerConstructor(Method, "MethodType"); + +Method.prototype.readAttribute = function (attributeId) { + + var options = {}; + switch (attributeId) { + case AttributeIds.Executable: + console.log(" warning Executable not implemented"); + options.value = { dataType: DataType.UInt32, value: 0 }; + options.statusCode = StatusCodes.Bad_AttributeIdInvalid; + break; + case AttributeIds.UserExecutable: + console.log(" warning UserExecutable not implemented"); + options.value = { dataType: DataType.UInt32, value: 0 }; + options.statusCode = StatusCodes.Bad_AttributeIdInvalid; + break; + default: + return BaseNode.prototype.readAttribute.call(this,attributeId); + } + return new DataValue(options); +}; function ServerEngine() { @@ -104,6 +401,7 @@ function ServerEngine() { this._nodeid_index = {}; this._browsename_index = {}; this.rootFolder = new Folder({ nodeId: "RootFolder", browseName: "Root" }); + assert(this.rootFolder.readAttribute); this._private_namespace = 1; this._internal_id_counter = 1000; @@ -115,7 +413,7 @@ function ServerEngine() { ServerEngine.prototype._register = function (object) { assert(object.nodeId); - assert(!this._nodeid_index.hasOwnProperty(object.nodeId.toString())," nodeid already registered"); + assert(!this._nodeid_index.hasOwnProperty(object.nodeId.toString()), " nodeid already registered"); this._nodeid_index[object.nodeId.toString()] = object; this._browsename_index[object.browseName] = object.nodeId; }; @@ -156,15 +454,17 @@ ServerEngine.prototype.createFolder = function (parentFolder, options) { // coerce parent folder to an object parentFolder = this.getFolder(parentFolder); - if (typeof options === "string" ) { + if (typeof options === "string") { options = { browseName: options }; } - options.nodeId = options.nodeId || this._build_new_NodeId(); + options.nodeId = options.nodeId || this._build_new_NodeId(); options.hasTypeDefinition = "FolderType"; - options.back_references= [{ referenceTypeId: this._resolveNodeId("Organizes"), nodeId: parentFolder.nodeId }]; + options.back_references = [ + { referenceTypeId: this._resolveNodeId("Organizes"), nodeId: parentFolder.nodeId } + ]; - var folder =this._createObject(options); + var folder = this._createObject(options); folder.parent = parentFolder; return folder; }; @@ -178,7 +478,7 @@ ServerEngine.prototype._add_objects_folder = function () { displayName: "Objects", description: "The browse entry point when looking for objects in the server address space." }; - return this.createFolder(this.rootFolder,options); + return this.createFolder(this.rootFolder, options); }; @@ -195,19 +495,19 @@ ServerEngine.prototype._createObject = function (options) { var self = this; if (options.references) { - options.references.forEach(function(reference){ + options.references.forEach(function (reference) { var nodeId = reference.nodeId; var parent = self.findObject(nodeId); - object._add_forward_reference(reference.referenceTypeId,parent.nodeId); - parent._add_backward_reference(reference.referenceTypeId,object.nodeId); + object._add_forward_reference(reference.referenceTypeId, parent.nodeId); + parent._add_backward_reference(reference.referenceTypeId, object.nodeId); }); } if (options.back_references) { - options.back_references.forEach(function(reference){ + options.back_references.forEach(function (reference) { var nodeId = reference.nodeId; var parent = self.findObject(nodeId); - object._add_backward_reference(reference.referenceTypeId,parent.nodeId); - parent._add_forward_reference(reference.referenceTypeId,object.nodeId); + object._add_backward_reference(reference.referenceTypeId, parent.nodeId); + parent._add_forward_reference(reference.referenceTypeId, object.nodeId); }); } @@ -217,7 +517,6 @@ ServerEngine.prototype._createObject = function (options) { }; - ServerEngine.prototype.addVariableInFolder = function (parentFolder, options) { parentFolder = this.getFolder(parentFolder); @@ -236,44 +535,27 @@ ServerEngine.prototype.addVariableInFolder = function (parentFolder, options) { }; -function makeStatusCode(statusCode, severity) { - assert(isFinite(statusCode.value), "invalid status code provided " + util.inspect(statusCode)); - return statusCode.value + 0x800000; -} -var StatusCodes = require("../../lib/opcua_status_code").StatusCodes; - -function coerceQualifyName(value) { - if (typeof value === "string") { - return { namespaceIndex: 0, name: value}; - } - assert(value.hasOwnProperty("namespaceIndex")); - assert(value.hasOwnProperty("name")); - return a; -} -function coerceLocalizedText(a) { - return a; -} -ServerEngine.prototype._makeReferenceDescription = function(reference, isForward) { +ServerEngine.prototype._makeReferenceDescription = function (reference, isForward) { - var referenceTypeId= reference.referenceTypeId; + var referenceTypeId = reference.referenceTypeId; var obj = this.findObject(reference.nodeId); var data = { - referenceTypeId: referenceTypeId, - isForward: isForward, - nodeId: obj.nodeId, - browseName: coerceQualifyName(obj.browseName), - displayName: coerceLocalizedText(obj.displayName), - nodeClass: obj.nodeClass, - typeDefinition: obj.typeDefinition + referenceTypeId: referenceTypeId, + isForward: isForward, + nodeId: obj.nodeId, + browseName: coerceQualifyName(obj.browseName), + displayName: coerceLocalizedText(obj.displayName[0]), + nodeClass: obj.nodeClass, + typeDefinition: obj.typeDefinition }; return new browse_service.ReferenceDescription(data) }; -ServerEngine.prototype.browseSingleNode = function (nodeId,browseDirection) { +ServerEngine.prototype.browseSingleNode = function (nodeId, browseDirection) { browseDirection = browseDirection || BrowseDirection.Both; @@ -283,7 +565,7 @@ ServerEngine.prototype.browseSingleNode = function (nodeId,browseDirection) { var obj = this.findObject(nodeId); var browseResult = { - statusCode: 0, + statusCode: StatusCodes.Good, continuationPoint: null, references: null }; @@ -291,15 +573,19 @@ ServerEngine.prototype.browseSingleNode = function (nodeId,browseDirection) { var self = this; if (!obj) { // Object Not Found - browseResult.statusCode = makeStatusCode(StatusCodes.Bad_NodeIdExists); + browseResult.statusCode = StatusCodes.Bad_NodeIdExists; } else { var f = []; - if (browseDirection == BrowseDirection.Forward || browseDirection == BrowseDirection.Both) { - f =obj.references.map(function(reference){return self._makeReferenceDescription(reference,true); }); + if (browseDirection === BrowseDirection.Forward || browseDirection === BrowseDirection.Both) { + f = obj.references.map(function (reference) { + return self._makeReferenceDescription(reference, true); + }); } var b = []; - if (browseDirection == BrowseDirection.Inverse || browseDirection == BrowseDirection.Both) { - b = obj.back_references.map(function(reference){return self._makeReferenceDescription(reference,false); }); + if (browseDirection === BrowseDirection.Inverse || browseDirection === BrowseDirection.Both) { + b = obj.back_references.map(function (reference) { + return self._makeReferenceDescription(reference, false); + }); } browseResult.references = f.concat(b); @@ -311,10 +597,10 @@ ServerEngine.prototype.browse = function (nodesToBrowse) { var results = []; var self = this; - nodesToBrowse.forEach(function(browseDescription){ + nodesToBrowse.forEach(function (browseDescription) { var nodeId = browseDescription.nodeId; var browseDirection = browseDescription.browseDirection; - var r = self.browseSingleNode(nodeId,browseDirection); + var r = self.browseSingleNode(nodeId, browseDirection); results.push(r); }); //xx return new browse_service.BrowseResponse({ @@ -323,13 +609,10 @@ ServerEngine.prototype.browse = function (nodesToBrowse) { return results; }; -var DataValue = require("../datavalue").DataValue; -var Variant = require("../variant").Variant; -var DataType =require("../variant").DataType; -var AttributeIds = read_service.AttributeIds; -ServerEngine.prototype.readSingleNode = function (nodeId,attributeId) { + +ServerEngine.prototype.readSingleNode = function (nodeId, attributeId) { // coerce nodeToBrowse to NodeId @@ -339,122 +622,14 @@ ServerEngine.prototype.readSingleNode = function (nodeId,attributeId) { if (!obj) { // may be return Bad_NodeIdUnknown in dataValue instead ? // Object Not Found - return { statusCode: StatusCodes.Bad_NodeIdUnknown.value }; + return { statusCode: StatusCodes.Bad_NodeIdUnknown }; } else { // check access // Bad_UserAccessDenied // Bad_NotReadable // invalid attributes : Bad_NodeAttributesInvalid - var options = {} - switch(attributeId) { - case AttributeIds.NodeId: - options.value = { dataType: DataType.NodeId, value: obj.nodeId } - break; - case AttributeIds.NodeClass: - assert(isFinite(obj.nodeClass.value)); - options.value = { dataType: DataType.UInt32, value: obj.nodeClass.value } - break; - case AttributeIds.BrowseName: - // QualifiedName - options.value = { dataType: DataType.QualifiedName, value: - { name: obj.browseName , namespaceIndex: 0 } - }; - break; - case AttributeIds.DisplayName: - options.value = { dataType: DataType.LocalizedText, value: obj.displayName[0] }; - break; - case AttributeIds.Description: - options.value = { dataType: DataType.LocalizedText, value: { locale:"en", text:""} }; - break; - case AttributeIds.WriteMask: - console.log(" warning WriteMask not implemented "+ nodeId.toString()); - options.value = { dataType: DataType.UInt32, value: 0 }; - break; - case AttributeIds.IsAbstract: - options.value = { dataType: DataType.Boolean, value: obj.isAbstract ? true:false }; - break; - case AttributeIds.UserWriteMask: - options.value = { dataType: DataType.UInt32, value: 0 }; - break; - case AttributeIds.Symmetric: - options.value = { dataType: DataType.Boolean, value: obj.symmetric ? true: false }; - options.statusCode = 0x80350000; - break; - case AttributeIds.InverseName: - options.value = { dataType: DataType.String, value: obj.inverseName || "" }; - break; - case AttributeIds.ContainsNoLoops: - console.log(" warning ContainsNoLoops not implemented"); - options.value = { dataType: DataType.Boolean, value: true }; - options.statusCode = 0x80350000; - break; - case AttributeIds.Value: - if (obj.hasOwnProperty("value")) { - assert(obj.value._schema.name == "Variant"); - options.value = obj.value; - } else { - console.log(" warning Value not implemented"); - options.value = { dataType: DataType.UInt32, value: 0 }; - options.statusCode = 0x80350000; - } - break; - case AttributeIds.EventNotifier: - options.value = { dataType: DataType.UInt32, value: 0 }; - break; - case AttributeIds.DataType: - console.log(" warning DataType not implemented"); - options.value = { dataType: DataType.UInt32, value: 0 }; - options.statusCode = 0x80350000; - break; - case AttributeIds.ValueRank: - console.log(" warning ValueRank not implemented"); - options.value = { dataType: DataType.UInt32, value: 0 }; - options.statusCode = 0x80350000; - break; - case AttributeIds.ArrayDimensions: - console.log(" warning ValueRank not implemented"); - options.value = { dataType: DataType.UInt32, value: 0 }; - options.statusCode = 0x80350000; - break; - case AttributeIds.AccessLevel: - console.log(" warning AccessLevel not implemented"); - options.value = { dataType: DataType.UInt32, value: 0 }; - options.statusCode = 0x80350000; - break; - case AttributeIds.UserAccessLevel: - console.log(" warning UserAccessLevel not implemented"); - options.value = { dataType: DataType.UInt32, value: 0 }; - options.statusCode = 0x80350000; - break; - case AttributeIds.MinimumSamplingInterval: - console.log(" warning MinimumSamplingInterval not implemented"); - options.value = { dataType: DataType.UInt32, value: 0 }; - options.statusCode = 0x80350000; - break; - case AttributeIds.Historizing: - console.log(" warning Historizing not implemented"); - options.value = { dataType: DataType.UInt32, value: 0 }; - options.statusCode = 0x80350000; - break; - case AttributeIds.Executable: - console.log(" warning Executable not implemented"); - options.value = { dataType: DataType.UInt32, value: 0 }; - options.statusCode = 0x80350000; - break; - case AttributeIds.UserExecutable: - console.log(" warning UserExecutable not implemented"); - options.value = { dataType: DataType.UInt32, value: 0 }; - options.statusCode = 0x80350000; - break; - default: - // may be return Bad_AttributeIdInvalid in dataValue instead ? - throw new Error(" Not implemented yet attributeId="+attributeId , util.inspect(obj,{colors:true})); - break; - - } - return new DataValue(options); - + return obj.readAttribute(attributeId); } }; @@ -462,19 +637,17 @@ ServerEngine.prototype.readSingleNode = function (nodeId,attributeId) { ServerEngine.prototype.read = function (nodesToRead) { var self = this; - var dataValues = nodesToRead.map( function(readValueId){ - var nodeId = readValueId.nodeId; - var attributeId = readValueId.attributeId; - var indexRange = readValueId.indexRange; + var dataValues = nodesToRead.map(function (readValueId) { + var nodeId = readValueId.nodeId; + var attributeId = readValueId.attributeId; + var indexRange = readValueId.indexRange; var dataEncoding = readValueId.dataEncoding; - return self.readSingleNode(nodeId,attributeId); + return self.readSingleNode(nodeId, attributeId); }); return dataValues; }; - - exports.ServerEngine = ServerEngine; exports.Variable = Variable; exports.Folder = Folder; diff --git a/lib/server/server_secure_channel_layer.js b/lib/server/server_secure_channel_layer.js index 99bf844e82..2ecd309b48 100644 --- a/lib/server/server_secure_channel_layer.js +++ b/lib/server/server_secure_channel_layer.js @@ -2,6 +2,7 @@ var _ = require("underscore"); var MessageChunker = require("../secure_channel_service").MessageChunker; var MessageBuilder = require("../message_builder").MessageBuilder; +var StatusCode = require("../../lib/opcua_status_code").StatusCode; var util = require("util"); var EventEmitter = require("events").EventEmitter; @@ -178,6 +179,8 @@ ServerSecureChannelLayer.prototype.send_response = function(msgType,responseMess ServerSecureChannelLayer.prototype.send_error_and_abort = function (statusCode, description) { + + assert(statusCode instanceof StatusCode); var response = new s.ServiceFault({}); @@ -198,9 +201,9 @@ ServerSecureChannelLayer.prototype._handle_OpenSecureChannelRequest = function(m assert( request._schema.name === "OpenSecureChannelRequest"); assert( msgType === "MSG" || msgType === "OPN"); - if (request.requestType == s.SecurityTokenRequestType.RENEW ) { + if (request.requestType === s.SecurityTokenRequestType.RENEW ) { // creates a new SecurityToken for an existing ClientSecureChannelLayer . - } else if(request.requestType == s.SecurityTokenRequestType.ISSUE) { + } else if(request.requestType === s.SecurityTokenRequestType.ISSUE) { // creates a new SecurityToken for a new ClientSecureChannelLayer } else { // Invalid requestType @@ -244,7 +247,7 @@ ServerSecureChannelLayer.prototype._on_initial_OpenSecureChannelRequest = functi self._cleanup_pending_timers(); self.emit("abort",request); }); - } else if (msgType == "OPN" && request._schema.name === "OpenSecureChannelRequest") { + } else if (msgType === "OPN" && request._schema.name === "OpenSecureChannelRequest") { // intercept client request to renew security Token self._handle_OpenSecureChannelRequest(msgType,request); } else { diff --git a/lib/session_service.js b/lib/session_service.js index bd05b3fd28..397518a0b1 100644 --- a/lib/session_service.js +++ b/lib/session_service.js @@ -32,7 +32,7 @@ var CreateSessionResponse_Schema = { //xx { name:"serverCertificate", fieldType:"ApplicationInstanceCertificate", documentation: "The application certificate for the server."}, { name:"serverEndpoints", isArray:true,fieldType:"EndpointDescription", documentation: "The endpoints provided by the server."}, { name:"serverSoftwareCertificates", isArray:true,fieldType:"SignedSoftwareCertificate", documentation: "The software certificates owned by the server."}, - { name:"serverSignature", fieldType:"SignatureData", documentation: "A signature created with the server certificate.", defaultValue:"null"}, + { name:"serverSignature", fieldType:"SignatureData", documentation: "A signature created with the server certificate."}, { name:"maxRequestMessageSize", fieldType:"UInt32", documentation: "The maximum message size accepted by the server."} ] diff --git a/lib/status_code.js b/lib/status_code.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/structures.js b/lib/structures.js index 640f502eca..4fe58b6a03 100644 --- a/lib/structures.js +++ b/lib/structures.js @@ -2,10 +2,6 @@ var factories = require("./factories"); var ec = require("./encode_decode"); var assert = require('better-assert'); -//The StatusCode is a 32-bit unsigned integer. The top 16 bits represent the numeric value of the -//code that shall be used for detecting specific errors or conditions. The bottom 16 bits are bit flags -//that contain additional information but do not affect the meaning of the StatusCode. -factories.registerObject({name:"StatusCode",subtype:"UInt32"}); // 7.33 Part 4 - P 143 factories.registerObject({name:"String" ,subtype:"UAString"}); @@ -65,7 +61,7 @@ var LocalizedText_Schema = { if ( ( encoding_mask & 0x01) === 0x01) { ec.encodeUAString(localizedText.locale,stream); } - if ( ( encoding_mask & 0x02) == 0x02 ) { + if ( ( encoding_mask & 0x02) === 0x02 ) { ec.encodeUAString(localizedText.text,stream); } }, @@ -77,7 +73,7 @@ var LocalizedText_Schema = { }else { self.locale = null; } - if ( ( encoding_mask & 0x02) == 0x02 ) { + if ( ( encoding_mask & 0x02) === 0x02 ) { self.text = ec.decodeUAString(stream); } else { self.text = null; @@ -281,7 +277,7 @@ var ApplicationDescription_Schema = { { name: "applicationType", fieldType: "ApplicationType" }, // A URI that identifies the Gateway Server associated with the discoveryUrls . - // this flag is not used if applicationType == CLIENT + // this flag is not used if applicationType === CLIENT { name: "gatewayServerUri", fieldType: "String" }, // A URI that identifies the discovery profile supported by the URLs provided @@ -308,14 +304,14 @@ var UserTokenPolicy_Schema = { // This field may only be specified if TokenType is ISSUEDTOKEN. // A URI for the type of token. Part 7 defines URIs for supported token types. - { name: "issuedTokenType", fieldType: "String" }, + { name: "issuedTokenType", fieldType: "String" , defaultValue:null }, // A optional URL for the token issuing service. - { name: "issuerEndpointUrl", fieldType: "String" }, + { name: "issuerEndpointUrl", fieldType: "String" , defaultValue:null }, // The security policy to use when encrypting or signing the UserToken when it is // passed to the Server in the ActivateSession request. see $7.35 - { name: "securityPolicyUri", fieldType: "String" } + { name: "securityPolicyUri", fieldType: "String" , defaultValue:null } ] }; @@ -580,8 +576,8 @@ exports.SignedSoftwareCertificate = factories.registerObject(SignedSoftwareCerti var SignatureData_Schema = { name: "SignatureData", fields: [ - { name: "algorithm" , fieldType: "String", documentation:"The cryptography algorithm used to create the signature." }, - { name: "signature", fieldType: "ByteString", documentation:"The digital signature."} + { name: "algorithm" , fieldType: "String", defaultValue:null, documentation:"The cryptography algorithm used to create the signature." }, + { name: "signature", fieldType: "ByteString", defaultValue:null, documentation:"The digital signature."} ] }; exports.SignatureData = factories.registerObject(SignatureData_Schema); @@ -639,7 +635,7 @@ function getDiagnosticInfoEncodingByte(diagnosticInfo) { if (diagnosticInfo.additionalInfo) { encoding_mask = set_flag(encoding_mask,DiagnosticInfo_EncodingByte.AdditionalInfo); } - if (diagnosticInfo.innerStatusCode) { + if (diagnosticInfo.innerStatusCode !== null) { encoding_mask = set_flag(encoding_mask,DiagnosticInfo_EncodingByte.InnerStatusCode); } if (diagnosticInfo.innerDiagnosticInfo !== null) { @@ -657,7 +653,7 @@ var DiagnosticInfo_Schema = { fields: [ { name: "identifier", fieldType: "DiagnosticInfoIdentifier"}, { name: "additionalInfo", fieldType: "String", defaultValue: null }, - { name: "innerStatusCode", fieldType: "StatusCode" }, + { name: "innerStatusCode", fieldType: "StatusCode" ,defaultValue: null}, { name: "innerDiagnosticInfo", fieldType: "DiagnosticInfo", defaultValue: null } ], id: 25, @@ -691,7 +687,7 @@ var DiagnosticInfo_Schema = { } // write inner status code if( check_flag(encoding_mask,DiagnosticInfo_EncodingByte.InnerStatusCode)) { - ec.encodeInt32(diagnosticInfo.innerStatusCode,stream); + ec.encodeStatusCode(diagnosticInfo.innerStatusCode,stream); } // write innerDiagnosticInfo if( check_flag(encoding_mask,DiagnosticInfo_EncodingByte.InnerDiagnosticInfo)) { @@ -758,7 +754,7 @@ var DiagnosticInfo_Schema = { } // read inner status code if( check_flag(encoding_mask,DiagnosticInfo_EncodingByte.InnerStatusCode)) { - diagnosticInfo.innerStatusCode = ec.decodeInt32(stream); + diagnosticInfo.innerStatusCode = ec.decodeStatusCode(stream); if (tracer) { tracer.trace("member", "innerStatusCode", diagnosticInfo.innerStatusCode, cursor_before, stream.length,"StatusCode"); cursor_before = stream.length; diff --git a/lib/transport/packet_assembler.js b/lib/transport/packet_assembler.js index a688c3fd48..fed0f42427 100644 --- a/lib/transport/packet_assembler.js +++ b/lib/transport/packet_assembler.js @@ -27,14 +27,14 @@ PacketAssembler.prototype.feed = function(data) { assert(data.length > 0 , "PacketAssembler expects a no-zero size data block"); assert(this.currentLength <= this.expectedLength); - if (this._stack.length == 0 ) { + if (this._stack.length === 0 ) { // this is the fist packet // we can extract the expected length here this.packet_info = this._read_packet_info(data); this.expectedLength = this.packet_info.length; - assert(this.currentLength == 0); + assert(this.currentLength === 0); // we can also validate the messageType ... this.emit("newMessage",this.packet_info,data); } @@ -45,7 +45,7 @@ PacketAssembler.prototype.feed = function(data) { this.currentLength += data.length; // expecting more data to complete current message chunk - } else if (this.currentLength + data.length == this.expectedLength ) { + } else if (this.currentLength + data.length === this.expectedLength ) { this._stack.push(data); this.currentLength += data.length; diff --git a/lib/transport/tcp_transport.js b/lib/transport/tcp_transport.js index e506347dd4..708b54af42 100644 --- a/lib/transport/tcp_transport.js +++ b/lib/transport/tcp_transport.js @@ -1,5 +1,6 @@ var EventEmitter = require("events").EventEmitter; +var StatusCode = require("../../lib/opcua_status_code").StatusCode; var BinaryStream = require("../../lib/binaryStream").BinaryStream; var verify_message_chunk = require("../../lib/chunk_manager").verify_message_chunk; @@ -344,7 +345,7 @@ ServerTCP_transport.prototype.end = "DEPRECATED"; ServerTCP_transport.prototype._abortWithError = function(statusCode,extraErrorDescription) { - assert(statusCode); + assert(statusCode instanceof StatusCode); var self = this; // send the error message and close the connection @@ -410,6 +411,9 @@ ServerTCP_transport.prototype.init = function(socket,callback) { self.packetAssembler.feed(data); } }); + self._socket.on('error', function(err) { + console.log("Server SOCKET Error : "+ err); + }); self._install_one_time_message_receiver(function(err,data){ if (err) { diff --git a/lib/variant.js b/lib/variant.js index 6e112d6698..409ddfbe04 100644 --- a/lib/variant.js +++ b/lib/variant.js @@ -208,7 +208,7 @@ var Variant_Schema = { if (!options) return null; if ( options.arrayType && options.arrayType != VariantArrayType.Scalar) { - if (options.arrayType == VariantArrayType.Array) { + if (options.arrayType === VariantArrayType.Array) { options.value = options.value.map(function(e) { return coerceVariantType(options.dataType,e); }); } else { throw new Error("Not implemented Yet"); } } else { diff --git a/packets/conversation.js b/packets/conversation.js new file mode 100644 index 0000000000..33d731f051 --- /dev/null +++ b/packets/conversation.js @@ -0,0 +1,3153 @@ + +// -> Hello +exports.peer0_0 = new Buffer([ + 0x48, 0x45, 0x4c, 0x46, 0x49, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0x6f, 0x70, 0x63, 0x2e, 0x74, 0x63, 0x70, 0x3a, + 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, + 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, + 0x30, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74 ]); + +// <- Ack +exports.peer1_0 = new Buffer([ + 0x41, 0x43, 0x4b, 0x46, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00 ]); + +// -> OpenSecureChannelRequest +exports.peer0_1 = new Buffer([ + 0x4f, 0x50, 0x4e, 0x46, 0x84, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, + 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x23, 0x4e, 0x6f, 0x6e, 0x65, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x00, 0xbe, 0x01, 0x00, 0x00, 0x8e, 0xd6, 0x6a, + 0x21, 0xaa, 0x2f, 0xcf, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xee, 0x36, 0x00 ]); + +// <- OpenSecureChannelResponse +exports.peer1_1 = new Buffer([ + 0x4f, 0x50, 0x4e, 0x46, 0x87, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, + 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x23, 0x4e, 0x6f, 0x6e, 0x65, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x00, 0xc1, 0x01, 0xaf, 0x24, 0x6b, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8e, + 0xd6, 0x6a, 0x21, 0xaa, 0x2f, 0xcf, 0x01, 0x80, + 0xee, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00 ]); + + +// -> CreateSessionRequest 1/2 +exports.peer0_2 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x4c, 0x04, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0xcd, 0x01, 0x00, 0x00, 0x64, 0x17, + 0x68, 0x21, 0xaa, 0x2f, 0xcf, 0x01, 0x01, 0x00, + 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x75, 0x72, 0x6e, + 0x3a, 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, + 0x31, 0x30, 0x32, 0x32, 0x3a, 0x55, 0x41, 0x20, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x29, 0x00, 0x00, + 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x2f, 0x02, 0x10, 0x00, 0x00, 0x00, 0x55, + 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x75, 0x72, 0x6e, 0x3a, 0x58, + 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, + 0x32, 0x32, 0x3a, 0x55, 0x41, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x29, 0x00, 0x00, 0x00, 0x6f, + 0x70, 0x63, 0x2e, 0x74, 0x63, 0x70, 0x3a, 0x2f, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, + 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x30, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x0b, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x20, + 0x00, 0x00, 0x00, 0x92, 0xde, 0xf2, 0x03, 0x62, + 0x7c, 0xf1, 0x0c, 0x6f, 0x6c, 0x3b, 0xdf, 0x8b, + 0x59, 0x5b, 0x16, 0x31, 0xde, 0xa3, 0x5d, 0x27, + 0xa2, 0x9c, 0xb7, 0x24, 0x11, 0x34, 0x1f, 0xc1, + 0x82, 0xe4, 0xe6, 0x09, 0x03, 0x00, 0x00, 0x30, + 0x82, 0x03, 0x05, 0x30, 0x82, 0x02, 0x6e, 0xa0, + 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x7b, 0x41, + 0xd7, 0x76, 0xcb, 0x6a, 0x2b, 0x41, 0x94, 0x07, + 0x96, 0xc9, 0xf8, 0x03, 0xd9, 0xdc, 0x30, 0x0d, + 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, + 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x38, 0x31, + 0x1b, 0x30, 0x19, 0x06, 0x0a, 0x09, 0x92, 0x26, + 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, + 0x0b, 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, + 0x31, 0x30, 0x32, 0x32, 0x31, 0x19, 0x30, 0x17, + 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x55, + 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x30, + 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x30, 0x38, 0x31, + 0x36, 0x31, 0x30, 0x33, 0x31, 0x31, 0x31, 0x5a, + 0x17, 0x0d, 0x33, 0x37, 0x30, 0x34, 0x30, 0x37, + 0x31, 0x30, 0x33, 0x31, 0x31, 0x31, 0x5a, 0x30, + 0x38, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x0a, 0x09, + 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, + 0x19, 0x16, 0x0b, 0x58, 0x4c, 0x45, 0x55, 0x52, + 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x31, 0x19, + 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, + 0x10, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, + 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, + 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, + 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xd5, 0x15, + 0x5b, 0x98, 0xc3, 0x69, 0x79, 0xf6, 0x59, 0xa8, + 0x5d, 0xa3, 0x23, 0xdd, 0x9d, 0x25, 0xa9, 0xec, + 0x1e, 0xa4, 0xe6, 0xbf, 0xf7, 0x07, 0x3a, 0x85, + 0xa7, 0x6e, 0xad, 0x80, 0x94, 0x94, 0xf1, 0x78, + 0xa7, 0x27, 0x33, 0x9d, 0x50, 0x2e, 0x36, 0x1f, + 0x34, 0x7b, 0x44, 0xa0, 0x18, 0xa8, 0xe1, 0x66, + 0x01, 0x8d, 0x8f, 0x21, 0x95, 0x39, 0xdf, 0xec, + 0x37, 0xe5, 0x87, 0xb6, 0xf5, 0x5c, 0x95, 0xaa, + 0x6f, 0x83, 0xe7, 0x74, 0x6a, 0x15, 0x0f, 0x52, + 0x60, 0xad, 0x65, 0x61, 0x32, 0xbe, 0xe0, 0xe1, + 0x28, 0x0c, 0x18, 0x95, 0x68, 0x46, 0x06, 0x8b, + 0xb0, 0x38, 0x4d, 0xfc, 0xce, 0xcb, 0x4d, 0xa9, + 0x41, 0xae, 0x42, 0x7a, 0x31, 0xdb, 0xd9, 0x00, + 0xa2, 0x78, 0x2e, 0x73, 0x93, 0x70, 0x90, 0x51, + 0x1b, 0x1a, 0x2b, 0xf0, 0xde, 0xca, 0x22, 0x4f, + 0xc1, 0xf7, 0x3d, 0xbc, 0xef, 0xd3, 0x02, 0x03, + 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x0e, 0x30, + 0x82, 0x01, 0x0a, 0x30, 0x1d, 0x06, 0x03, 0x55, + 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x41, 0x24, + 0x7d, 0x36, 0xf7, 0x75, 0x00, 0x23, 0xa4, 0xbe, + 0x6a, 0xb2, 0x77, 0xda, 0x83, 0x58, 0x4a, 0xb3, + 0xf8, 0xc6, 0x30, 0x6f, 0x06, 0x03, 0x55, 0x1d, + 0x23, 0x04, 0x68, 0x30, 0x66, 0x80, 0x14, 0x41, + 0x24, 0x7d, 0x36, 0xf7, 0x75, 0x00, 0x23, 0xa4, + 0xbe, 0x6a, 0xb2, 0x77, 0xda, 0x83, 0x58, 0x4a, + 0xb3, 0xf8, 0xc6, 0xa1, 0x3c, 0xa4, 0x3a, 0x30, + 0x38, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x0a, 0x09, + 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, + 0x19, 0x16, 0x0b, 0x58, 0x4c, 0x45, 0x55, 0x52, + 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x31, 0x19, + 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, + 0x10, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x82, 0x10, 0x7b, 0x41, 0xd7, 0x76, 0xcb, + 0x6a, 0x2b, 0x41, 0x94, 0x07, 0x96, 0xc9, 0xf8, + 0x03, 0xd9, 0xdc, 0x30, 0x0c, 0x06, 0x03, 0x55, + 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, + 0x00, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, + 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x02, + 0xf4, 0x30, 0x20, 0x06, 0x03, 0x55, 0x1d, 0x25, + 0x01, 0x01, 0xff, 0x04, 0x16, 0x30, 0x14, 0x06, + 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, + 0x01, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, + 0x07, 0x03, 0x02, 0x30, 0x38, 0x06, 0x03, 0x55, + 0x1d, 0x11, 0x04, 0x31, 0x30, 0x2f, 0x86, 0x20, + 0x75, 0x72, 0x6e, 0x3a, 0x58, 0x4c, 0x45, 0x55, + 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x3a, + 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x82, 0x0b, 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, + 0x31, 0x31, 0x30, 0x32, 0x32, 0x30, 0x0d, 0x06, + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, + 0x01, 0x05, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, + 0x25, 0xd5, 0x0b, 0x8e, 0xa8, 0xb6, 0x41, 0xeb, + 0x01, 0x8b, 0x9a, 0xf2, 0xaa, 0x34, 0x40, 0x26, + 0xd3, 0xec, 0xff, 0xd2, 0x9f, 0x97, 0xc0, 0xb4, + 0x6d, 0x9f, 0xfb, 0x16, 0x5e, 0x02, 0x71, 0x7d, + 0x42, 0x67, 0xbb, 0x60, 0xb0, 0x04, 0xea, 0x6c, + 0xdb, 0xad, 0x48, 0xb1, 0x3a, 0x45, 0x0f, 0xa8, + 0x9b, 0x35, 0x6c, 0x48, 0x00, 0xd8, 0x2e, 0xa9, + 0x83, 0x61, 0x32, 0xa8, 0x21, 0x98, 0x7d, 0x28 ]); + +// -> CreateSessionRequest 2/2 +exports.peer0_3 = new Buffer([ + 0xd8, 0x75, 0x1d, 0x77, 0x6a, 0xc1, 0x9b, 0xd3, + 0x8c, 0x39, 0x4d, 0x9e, 0xd9, 0x30, 0xcb, 0xd6, + 0x04, 0xb3, 0x13, 0xd2, 0x53, 0xad, 0xdf, 0x59, + 0xb6, 0x82, 0x41, 0x20, 0x94, 0xe3, 0x12, 0xf1, + 0x0d, 0x3f, 0x3e, 0x92, 0xbe, 0xce, 0xba, 0xb4, + 0x16, 0xdd, 0x23, 0x4a, 0x15, 0x2a, 0x7e, 0xa9, + 0x27, 0xd5, 0xc6, 0x78, 0x0a, 0x88, 0xbf, 0x21, + 0x29, 0x00, 0xce, 0x87, 0x0c, 0x91, 0x42, 0xb9, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x4f, 0x22, 0x41, + 0x00, 0x00, 0x40, 0x00 ]); + +// <- CreateSessionResponse 1/xx +//------------------------------------------------------------------------------------------------------- +exports.peer1_2 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x1c, 0x4c, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0xd0, 0x01, 0xcd, 0x32, 0x77, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x00, 0x27, + 0xe5, 0x38, 0x40, 0x05, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, 0x59, + 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, 0x9e, + 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, 0xcc, + 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, 0xbb, + 0xe0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x80, 0x4f, + 0x22, 0x41, 0x20, 0x00, 0x00, 0x00, 0xf0, 0x06, + 0xb0, 0x50, 0xf2, 0x82, 0x0c, 0x29, 0x8f, 0x6e, + 0x54, 0x9a, 0x13, 0xe9, 0xa6, 0xac, 0x4d, 0x40, + 0xb9, 0xe9, 0xb8, 0xe8, 0x07, 0xdb, 0xda, 0x40, + 0xaa, 0x20, 0x29, 0xb7, 0x29, 0x74, 0x09, 0x03, + 0x00, 0x00, 0x30, 0x82, 0x03, 0x05, 0x30, 0x82, + 0x02, 0x6e, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, + 0x10, 0x7b, 0x41, 0xd7, 0x76, 0xcb, 0x6a, 0x2b, + 0x41, 0x94, 0x07, 0x96, 0xc9, 0xf8, 0x03, 0xd9, + 0xdc, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, + 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, + 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x0a, + 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, + 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, 0x45, 0x55, + 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x31, + 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, + 0x30, 0x38, 0x31, 0x36, 0x31, 0x30, 0x33, 0x31, + 0x31, 0x31, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x30, + 0x34, 0x30, 0x37, 0x31, 0x30, 0x33, 0x31, 0x31, + 0x31, 0x5a, 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, + 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, + 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, + 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, + 0x32, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x30, 0x81, 0x9f, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, + 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, + 0x00, 0xd5, 0x15, 0x5b, 0x98, 0xc3, 0x69, 0x79, + 0xf6, 0x59, 0xa8, 0x5d, 0xa3, 0x23, 0xdd, 0x9d, + 0x25, 0xa9, 0xec, 0x1e, 0xa4, 0xe6, 0xbf, 0xf7, + 0x07, 0x3a, 0x85, 0xa7, 0x6e, 0xad, 0x80, 0x94, + 0x94, 0xf1, 0x78, 0xa7, 0x27, 0x33, 0x9d, 0x50, + 0x2e, 0x36, 0x1f, 0x34, 0x7b, 0x44, 0xa0, 0x18, + 0xa8, 0xe1, 0x66, 0x01, 0x8d, 0x8f, 0x21, 0x95, + 0x39, 0xdf, 0xec, 0x37, 0xe5, 0x87, 0xb6, 0xf5, + 0x5c, 0x95, 0xaa, 0x6f, 0x83, 0xe7, 0x74, 0x6a, + 0x15, 0x0f, 0x52, 0x60, 0xad, 0x65, 0x61, 0x32, + 0xbe, 0xe0, 0xe1, 0x28, 0x0c, 0x18, 0x95, 0x68, + 0x46, 0x06, 0x8b, 0xb0, 0x38, 0x4d, 0xfc, 0xce, + 0xcb, 0x4d, 0xa9, 0x41, 0xae, 0x42, 0x7a, 0x31, + 0xdb, 0xd9, 0x00, 0xa2, 0x78, 0x2e, 0x73, 0x93, + 0x70, 0x90, 0x51, 0x1b, 0x1a, 0x2b, 0xf0, 0xde, + 0xca, 0x22, 0x4f, 0xc1, 0xf7, 0x3d, 0xbc, 0xef, + 0xd3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, + 0x01, 0x0e, 0x30, 0x82, 0x01, 0x0a, 0x30, 0x1d, + 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, + 0x14, 0x41, 0x24, 0x7d, 0x36, 0xf7, 0x75, 0x00, + 0x23, 0xa4, 0xbe, 0x6a, 0xb2, 0x77, 0xda, 0x83, + 0x58, 0x4a, 0xb3, 0xf8, 0xc6, 0x30, 0x6f, 0x06, + 0x03, 0x55, 0x1d, 0x23, 0x04, 0x68, 0x30, 0x66, + 0x80, 0x14, 0x41, 0x24, 0x7d, 0x36, 0xf7, 0x75, + 0x00, 0x23, 0xa4, 0xbe, 0x6a, 0xb2, 0x77, 0xda, + 0x83, 0x58, 0x4a, 0xb3, 0xf8, 0xc6, 0xa1, 0x3c, + 0xa4, 0x3a, 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, + 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, + 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, + 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, + 0x32, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x82, 0x10, 0x7b, 0x41, + 0xd7, 0x76, 0xcb, 0x6a, 0x2b, 0x41, 0x94, 0x07, + 0x96, 0xc9, 0xf8, 0x03, 0xd9, 0xdc, 0x30, 0x0c, + 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, + 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06, 0x03, + 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, + 0x03, 0x02, 0x02, 0xf4, 0x30, 0x20, 0x06, 0x03, + 0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x16, + 0x30, 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, + 0x05, 0x07, 0x03, 0x01, 0x06, 0x08, 0x2b, 0x06, + 0x01, 0x05, 0x05, 0x07, 0x03, 0x02, 0x30, 0x38, + 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x31, 0x30, + 0x2f, 0x86, 0x20, 0x75, 0x72, 0x6e, 0x3a, 0x58, + 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, + 0x32, 0x32, 0x3a, 0x55, 0x41, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x82, 0x0b, 0x58, 0x4c, 0x45, + 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, + 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, + 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, + 0x81, 0x81, 0x00, 0x25, 0xd5, 0x0b, 0x8e, 0xa8, + 0xb6, 0x41, 0xeb, 0x01, 0x8b, 0x9a, 0xf2, 0xaa, + 0x34, 0x40, 0x26, 0xd3, 0xec, 0xff, 0xd2, 0x9f, + 0x97, 0xc0, 0xb4, 0x6d, 0x9f, 0xfb, 0x16, 0x5e, + 0x02, 0x71, 0x7d, 0x42, 0x67, 0xbb, 0x60, 0xb0, + 0x04, 0xea, 0x6c, 0xdb, 0xad, 0x48, 0xb1, 0x3a, + 0x45, 0x0f, 0xa8, 0x9b, 0x35, 0x6c, 0x48, 0x00, + 0xd8, 0x2e, 0xa9, 0x83, 0x61, 0x32, 0xa8, 0x21, + 0x98, 0x7d, 0x28, 0xd8, 0x75, 0x1d, 0x77, 0x6a, + 0xc1, 0x9b, 0xd3, 0x8c, 0x39, 0x4d, 0x9e, 0xd9, + 0x30, 0xcb, 0xd6, 0x04, 0xb3, 0x13, 0xd2, 0x53, + 0xad, 0xdf, 0x59, 0xb6, 0x82, 0x41, 0x20, 0x94, + 0xe3, 0x12, 0xf1, 0x0d, 0x3f, 0x3e, 0x92, 0xbe, + 0xce, 0xba, 0xb4, 0x16, 0xdd, 0x23, 0x4a, 0x15, + 0x2a, 0x7e, 0xa9, 0x27, 0xd5, 0xc6, 0x78, 0x0a, + 0x88, 0xbf, 0x21, 0x29, 0x00, 0xce, 0x87, 0x0c, + 0x91, 0x42, 0xb9, 0x0b, 0x00, 0x00, 0x00, 0x29, + 0x00, 0x00, 0x00, 0x6f, 0x70, 0x63, 0x2e, 0x74, + 0x63, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, + 0x31, 0x32, 0x31, 0x30, 0x2f, 0x55, 0x41, 0x2f, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x20, 0x00, 0x00, 0x00, + 0x75, 0x72, 0x6e, 0x3a, 0x58, 0x4c, 0x45, 0x55, + 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x3a, + 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x29, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f]); +exports.peer1_3 = new Buffer([ + 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x02, 0x10, 0x00, + 0x00, 0x00, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x00, + 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x6f, 0x70, + 0x63, 0x2e, 0x74, 0x63, 0x70, 0x3a, 0x2f, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, + 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x30, 0x2f, + 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x30, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, + 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, + 0x31, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x79, 0x27, 0x00, 0x00, 0x00, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, + 0x3a, 0x36, 0x31, 0x32, 0x31, 0x32, 0x2f, 0x55, + 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x26, 0x00, + 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, + 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x33, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x33, 0x00, 0x00, 0x00, 0x6e, 0x65, 0x74, 0x2e, + 0x74, 0x63, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, + 0x36, 0x31, 0x32, 0x31, 0x34, 0x2f, 0x55, 0x41, + 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, + 0x00, 0x00, 0x00, 0x6e, 0x65, 0x74, 0x2e, 0x70, + 0x69, 0x70, 0x65, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x2f, + 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x79, 0x09, 0x03, 0x00, 0x00, 0x30, 0x82, 0x03, + 0x05, 0x30, 0x82, 0x02, 0x6e, 0xa0, 0x03, 0x02, + 0x01, 0x02, 0x02, 0x10, 0x7b, 0x41, 0xd7, 0x76, + 0xcb, 0x6a, 0x2b, 0x41, 0x94, 0x07, 0x96, 0xc9, + 0xf8, 0x03, 0xd9, 0xdc, 0x30, 0x0d, 0x06, 0x09, + 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, + 0x05, 0x05, 0x00, 0x30, 0x38, 0x31, 0x1b, 0x30, + 0x19, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, + 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, + 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, + 0x32, 0x32, 0x31, 0x19 ]); +exports.peer1_4 = new Buffer([ + 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, + 0x10, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x30, + 0x38, 0x31, 0x36, 0x31, 0x30, 0x33, 0x31, 0x31, + 0x31, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x30, 0x34, + 0x30, 0x37, 0x31, 0x30, 0x33, 0x31, 0x31, 0x31, + 0x5a, 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, 0x06, + 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, + 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, 0x45, + 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, + 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x30, 0x81, 0x9f, 0x30, 0x0d, + 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, + 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, + 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, + 0xd5, 0x15, 0x5b, 0x98, 0xc3, 0x69, 0x79, 0xf6, + 0x59, 0xa8, 0x5d, 0xa3, 0x23, 0xdd, 0x9d, 0x25, + 0xa9, 0xec, 0x1e, 0xa4, 0xe6, 0xbf, 0xf7, 0x07, + 0x3a, 0x85, 0xa7, 0x6e, 0xad, 0x80, 0x94, 0x94, + 0xf1, 0x78, 0xa7, 0x27, 0x33, 0x9d, 0x50, 0x2e, + 0x36, 0x1f, 0x34, 0x7b, 0x44, 0xa0, 0x18, 0xa8, + 0xe1, 0x66, 0x01, 0x8d, 0x8f, 0x21, 0x95, 0x39, + 0xdf, 0xec, 0x37, 0xe5, 0x87, 0xb6, 0xf5, 0x5c, + 0x95, 0xaa, 0x6f, 0x83, 0xe7, 0x74, 0x6a, 0x15, + 0x0f, 0x52, 0x60, 0xad, 0x65, 0x61, 0x32, 0xbe, + 0xe0, 0xe1, 0x28, 0x0c, 0x18, 0x95, 0x68, 0x46, + 0x06, 0x8b, 0xb0, 0x38, 0x4d, 0xfc, 0xce, 0xcb, + 0x4d, 0xa9, 0x41, 0xae, 0x42, 0x7a, 0x31, 0xdb, + 0xd9, 0x00, 0xa2, 0x78, 0x2e, 0x73, 0x93, 0x70, + 0x90, 0x51, 0x1b, 0x1a, 0x2b, 0xf0, 0xde, 0xca, + 0x22, 0x4f, 0xc1, 0xf7, 0x3d, 0xbc, 0xef, 0xd3, + 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, + 0x0e, 0x30, 0x82, 0x01, 0x0a, 0x30, 0x1d, 0x06, + 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, + 0x41, 0x24, 0x7d, 0x36, 0xf7, 0x75, 0x00, 0x23, + 0xa4, 0xbe, 0x6a, 0xb2, 0x77, 0xda, 0x83, 0x58, + 0x4a, 0xb3, 0xf8, 0xc6, 0x30, 0x6f, 0x06, 0x03, + 0x55, 0x1d, 0x23, 0x04, 0x68, 0x30, 0x66, 0x80, + 0x14, 0x41, 0x24, 0x7d, 0x36, 0xf7, 0x75, 0x00, + 0x23, 0xa4, 0xbe, 0x6a, 0xb2, 0x77, 0xda, 0x83, + 0x58, 0x4a, 0xb3, 0xf8, 0xc6, 0xa1, 0x3c, 0xa4, + 0x3a, 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, 0x06, + 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, + 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, 0x45, + 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, + 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x82, 0x10, 0x7b, 0x41, 0xd7, + 0x76, 0xcb, 0x6a, 0x2b, 0x41, 0x94, 0x07, 0x96, + 0xc9, 0xf8, 0x03, 0xd9, 0xdc, 0x30, 0x0c, 0x06, + 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, + 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06, 0x03, 0x55, + 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, + 0x02, 0x02, 0xf4, 0x30, 0x20, 0x06, 0x03, 0x55, + 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x16, 0x30, + 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, + 0x07, 0x03, 0x01, 0x06, 0x08, 0x2b, 0x06, 0x01, + 0x05, 0x05, 0x07, 0x03, 0x02, 0x30, 0x38, 0x06, + 0x03, 0x55, 0x1d, 0x11, 0x04, 0x31, 0x30, 0x2f, + 0x86, 0x20, 0x75, 0x72, 0x6e, 0x3a, 0x58, 0x4c, + 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, + 0x32, 0x3a, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x82, 0x0b, 0x58, 0x4c, 0x45, 0x55, + 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x81, + 0x81, 0x00, 0x25, 0xd5, 0x0b, 0x8e, 0xa8, 0xb6, + 0x41, 0xeb, 0x01, 0x8b, 0x9a, 0xf2, 0xaa, 0x34, + 0x40, 0x26, 0xd3, 0xec, 0xff, 0xd2, 0x9f, 0x97, + 0xc0, 0xb4, 0x6d, 0x9f, 0xfb, 0x16, 0x5e, 0x02, + 0x71, 0x7d, 0x42, 0x67, 0xbb, 0x60, 0xb0, 0x04, + 0xea, 0x6c, 0xdb, 0xad, 0x48, 0xb1, 0x3a, 0x45, + 0x0f, 0xa8, 0x9b, 0x35, 0x6c, 0x48, 0x00, 0xd8, + 0x2e, 0xa9, 0x83, 0x61, 0x32, 0xa8, 0x21, 0x98, + 0x7d, 0x28, 0xd8, 0x75, 0x1d, 0x77, 0x6a, 0xc1, + 0x9b, 0xd3, 0x8c, 0x39, 0x4d, 0x9e, 0xd9, 0x30, + 0xcb, 0xd6, 0x04, 0xb3, 0x13, 0xd2, 0x53, 0xad, + 0xdf, 0x59, 0xb6, 0x82, 0x41, 0x20, 0x94, 0xe3, + 0x12, 0xf1, 0x0d, 0x3f, 0x3e, 0x92, 0xbe, 0xce, + 0xba, 0xb4, 0x16, 0xdd, 0x23, 0x4a, 0x15, 0x2a, + 0x7e, 0xa9, 0x27, 0xd5, 0xc6, 0x78, 0x0a, 0x88, + 0xbf, 0x21, 0x29, 0x00, 0xce, 0x87, 0x0c, 0x91, + 0x42, 0xb9, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, 0x73, + 0x69, 0x63, 0x31, 0x32, 0x38, 0x52, 0x73, 0x61, + 0x31, 0x35, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x31, + 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x33, 0x00, 0x00, 0x00, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, + 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x23, 0x42, 0x61, 0x73, 0x69, 0x63, + 0x32, 0x35, 0x36, 0x01, 0x00, 0x00, 0x00, 0x32, + 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x33, 0x00, 0x00, 0x00, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, + 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x23, 0x42, 0x61, 0x73, 0x69, 0x63, + 0x32, 0x35, 0x36, 0x01, 0x00, 0x00, 0x00, 0x33, + 0x03, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x75, 0x72, 0x6e, 0x3a, 0x6f, 0x61, 0x73, 0x69, + 0x73, 0x3a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x3a, + 0x74, 0x63, 0x3a, 0x53, 0x41, 0x4d, 0x4c, 0x3a, + 0x31, 0x2e, 0x30, 0x3a, 0x61, 0x73, 0x73, 0x65, + 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x41, 0x73, + 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0xff, + 0xff, 0xff, 0xff, 0x33, 0x00, 0x00, 0x00, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, + 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f ]); +exports.peer1_5 = new Buffer([ + 0x55, 0x41, 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x23, 0x42, 0x61, 0x73, 0x69, 0x63, 0x32, + 0x35, 0x36, 0x41, 0x00, 0x00, 0x00, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, + 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, + 0x41, 0x2d, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x2f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, + 0x6f, 0x72, 0x74, 0x2f, 0x75, 0x61, 0x74, 0x63, + 0x70, 0x2d, 0x75, 0x61, 0x73, 0x63, 0x2d, 0x75, + 0x61, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x03, + 0x29, 0x00, 0x00, 0x00, 0x6f, 0x70, 0x63, 0x2e, + 0x74, 0x63, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, + 0x36, 0x31, 0x32, 0x31, 0x30, 0x2f, 0x55, 0x41, + 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x00, 0x00, + 0x00, 0x75, 0x72, 0x6e, 0x3a, 0x58, 0x4c, 0x45, + 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, + 0x3a, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x29, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, + 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, + 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x02, 0x10, + 0x00, 0x00, 0x00, 0x55, 0x41, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x02, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, + 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x6f, + 0x70, 0x63, 0x2e, 0x74, 0x63, 0x70, 0x3a, 0x2f, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, + 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x30, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x30, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, + 0x31, 0x31, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x27, 0x00, 0x00, 0x00, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, + 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x32, 0x2f, + 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x26, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, + 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, + 0x33, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x43]); +exports.peer1_6 = new Buffer([ + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x33, 0x00, 0x00, + 0x00, 0x6e, 0x65, 0x74, 0x2e, 0x74, 0x63, 0x70, + 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, + 0x31, 0x34, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x2e, 0x00, 0x00, 0x00, + 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x69, 0x70, 0x65, + 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x55, 0x41, 0x2f, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x09, 0x03, + 0x00, 0x00, 0x30, 0x82, 0x03, 0x05, 0x30, 0x82, + 0x02, 0x6e, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, + 0x10, 0x7b, 0x41, 0xd7, 0x76, 0xcb, 0x6a, 0x2b, + 0x41, 0x94, 0x07, 0x96, 0xc9, 0xf8, 0x03, 0xd9, + 0xdc, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, + 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, + 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x0a, + 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, + 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, 0x45, 0x55, + 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x31, + 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, + 0x30, 0x38, 0x31, 0x36, 0x31, 0x30, 0x33, 0x31, + 0x31, 0x31, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x30, + 0x34, 0x30, 0x37, 0x31, 0x30, 0x33, 0x31, 0x31, + 0x31, 0x5a, 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, + 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, + 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, + 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, + 0x32, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x30, 0x81, 0x9f, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, + 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, + 0x00, 0xd5, 0x15, 0x5b, 0x98, 0xc3, 0x69, 0x79, + 0xf6, 0x59, 0xa8, 0x5d, 0xa3, 0x23, 0xdd, 0x9d, + 0x25, 0xa9, 0xec, 0x1e, 0xa4, 0xe6, 0xbf, 0xf7, + 0x07, 0x3a, 0x85, 0xa7, 0x6e, 0xad, 0x80, 0x94, + 0x94, 0xf1, 0x78, 0xa7, 0x27, 0x33, 0x9d, 0x50, + 0x2e, 0x36, 0x1f, 0x34, 0x7b, 0x44, 0xa0, 0x18, + 0xa8, 0xe1, 0x66, 0x01, 0x8d, 0x8f, 0x21, 0x95, + 0x39, 0xdf, 0xec, 0x37, 0xe5, 0x87, 0xb6, 0xf5, + 0x5c, 0x95, 0xaa, 0x6f, 0x83, 0xe7, 0x74, 0x6a, + 0x15, 0x0f, 0x52, 0x60, 0xad, 0x65, 0x61, 0x32, + 0xbe, 0xe0, 0xe1, 0x28, 0x0c, 0x18, 0x95, 0x68, + 0x46, 0x06, 0x8b, 0xb0, 0x38, 0x4d, 0xfc, 0xce, + 0xcb, 0x4d, 0xa9, 0x41, 0xae, 0x42, 0x7a, 0x31, + 0xdb, 0xd9, 0x00, 0xa2, 0x78, 0x2e, 0x73, 0x93, + 0x70, 0x90, 0x51, 0x1b, 0x1a, 0x2b, 0xf0, 0xde, + 0xca, 0x22, 0x4f, 0xc1, 0xf7, 0x3d, 0xbc, 0xef, + 0xd3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, + 0x01, 0x0e, 0x30, 0x82, 0x01, 0x0a, 0x30, 0x1d, + 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, + 0x14, 0x41, 0x24, 0x7d, 0x36, 0xf7, 0x75, 0x00, + 0x23, 0xa4, 0xbe, 0x6a, 0xb2, 0x77, 0xda, 0x83, + 0x58, 0x4a, 0xb3, 0xf8, 0xc6, 0x30, 0x6f, 0x06, + 0x03, 0x55, 0x1d, 0x23, 0x04, 0x68, 0x30, 0x66, + 0x80, 0x14, 0x41, 0x24, 0x7d, 0x36, 0xf7, 0x75, + 0x00, 0x23, 0xa4, 0xbe, 0x6a, 0xb2, 0x77, 0xda, + 0x83, 0x58, 0x4a, 0xb3, 0xf8, 0xc6, 0xa1, 0x3c, + 0xa4, 0x3a, 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, + 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, + 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, + 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, + 0x32, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x82, 0x10, 0x7b, 0x41, + 0xd7, 0x76, 0xcb, 0x6a, 0x2b, 0x41, 0x94, 0x07, + 0x96, 0xc9, 0xf8, 0x03, 0xd9, 0xdc, 0x30, 0x0c, + 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, + 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06, 0x03, + 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, + 0x03, 0x02, 0x02, 0xf4, 0x30, 0x20, 0x06, 0x03, + 0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x16, + 0x30, 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, + 0x05, 0x07, 0x03, 0x01, 0x06, 0x08, 0x2b, 0x06, + 0x01, 0x05, 0x05, 0x07, 0x03, 0x02, 0x30, 0x38, + 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x31, 0x30, + 0x2f, 0x86, 0x20, 0x75, 0x72, 0x6e, 0x3a, 0x58, + 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, + 0x32, 0x32, 0x3a, 0x55, 0x41, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x82, 0x0b, 0x58, 0x4c, 0x45, + 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, + 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, + 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, + 0x81, 0x81, 0x00, 0x25, 0xd5, 0x0b, 0x8e, 0xa8, + 0xb6, 0x41, 0xeb, 0x01, 0x8b, 0x9a, 0xf2, 0xaa, + 0x34, 0x40, 0x26, 0xd3, 0xec, 0xff, 0xd2, 0x9f, + 0x97, 0xc0, 0xb4, 0x6d, 0x9f, 0xfb, 0x16, 0x5e, + 0x02, 0x71, 0x7d, 0x42, 0x67, 0xbb, 0x60, 0xb0, + 0x04, 0xea, 0x6c, 0xdb, 0xad, 0x48, 0xb1, 0x3a, + 0x45, 0x0f, 0xa8, 0x9b, 0x35, 0x6c, 0x48, 0x00, + 0xd8, 0x2e, 0xa9, 0x83, 0x61, 0x32, 0xa8, 0x21, + 0x98, 0x7d, 0x28, 0xd8, 0x75, 0x1d, 0x77, 0x6a, + 0xc1, 0x9b, 0xd3, 0x8c, 0x39, 0x4d, 0x9e, 0xd9, + 0x30, 0xcb, 0xd6, 0x04, 0xb3, 0x13, 0xd2, 0x53, + 0xad, 0xdf, 0x59, 0xb6, 0x82, 0x41, 0x20, 0x94, + 0xe3, 0x12, 0xf1, 0x0d, 0x3f, 0x3e, 0x92, 0xbe, + 0xce, 0xba, 0xb4, 0x16, 0xdd, 0x23, 0x4a, 0x15, + 0x2a, 0x7e, 0xa9, 0x27, 0xd5, 0xc6, 0x78, 0x0a, + 0x88, 0xbf, 0x21, 0x29, 0x00, 0xce, 0x87, 0x0c, + 0x91, 0x42, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x2f, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x23, 0x4e, 0x6f, + 0x6e, 0x65, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, + 0x73, 0x69, 0x63, 0x32, 0x35, 0x36, 0x01, 0x00 ]); +exports.peer1_7 = new Buffer([ + 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, + 0x73, 0x69, 0x63, 0x32, 0x35, 0x36, 0x01, 0x00, + 0x00, 0x00, 0x32, 0x02, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, + 0x73, 0x69, 0x63, 0x32, 0x35, 0x36, 0x01, 0x00, + 0x00, 0x00, 0x33, 0x03, 0x00, 0x00, 0x00, 0x2f, + 0x00, 0x00, 0x00, 0x75, 0x72, 0x6e, 0x3a, 0x6f, + 0x61, 0x73, 0x69, 0x73, 0x3a, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x3a, 0x74, 0x63, 0x3a, 0x53, 0x41, + 0x4d, 0x4c, 0x3a, 0x31, 0x2e, 0x30, 0x3a, 0x61, + 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, + 0x3a, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, + 0x6f, 0x6e, 0xff, 0xff, 0xff, 0xff, 0x33, 0x00, + 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, 0x73, + 0x69, 0x63, 0x32, 0x35, 0x36, 0x41, 0x00, 0x00, + 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x55, 0x41, 0x2d, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x75, + 0x61, 0x74, 0x63, 0x70, 0x2d, 0x75, 0x61, 0x73, + 0x63, 0x2d, 0x75, 0x61, 0x62, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x00, 0x26, 0x00, 0x00, 0x00, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, + 0x36, 0x31, 0x32, 0x31, 0x31, 0x2f, 0x55, 0x41, + 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x00, 0x00, + 0x00, 0x75, 0x72, 0x6e, 0x3a, 0x58, 0x4c, 0x45, + 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, + 0x3a, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x29, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, + 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x6f, 0x72 ]); +exports.peer1_8 = new Buffer([ + 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x2f, 0x02, 0x10, 0x00, 0x00, 0x00, 0x55, + 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x02, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0x29, + 0x00, 0x00, 0x00, 0x6f, 0x70, 0x63, 0x2e, 0x74, + 0x63, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, + 0x31, 0x32, 0x31, 0x30, 0x2f, 0x55, 0x41, 0x2f, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x30, 0x00, 0x00, 0x00, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, + 0x3a, 0x36, 0x31, 0x32, 0x31, 0x31, 0x2f, 0x55, + 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, + 0x27, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, + 0x32, 0x31, 0x32, 0x2f, 0x55, 0x41, 0x2f, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x26, 0x00, 0x00, 0x00, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, + 0x36, 0x31, 0x32, 0x31, 0x33, 0x2f, 0x55, 0x41, + 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x33, 0x00, 0x00, + 0x00, 0x6e, 0x65, 0x74, 0x2e, 0x74, 0x63, 0x70, + 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, + 0x31, 0x34, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x2e, 0x00, 0x00, 0x00, + 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x69, 0x70, 0x65, + 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x55, 0x41, 0x2f, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x09, 0x03, + 0x00, 0x00, 0x30, 0x82, 0x03, 0x05, 0x30, 0x82, + 0x02, 0x6e, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, + 0x10, 0x7b, 0x41, 0xd7, 0x76, 0xcb, 0x6a, 0x2b, + 0x41, 0x94, 0x07, 0x96, 0xc9, 0xf8, 0x03, 0xd9, + 0xdc, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, + 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, + 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x0a, + 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, + 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, 0x45, 0x55, + 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x31, + 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, + 0x30, 0x38, 0x31, 0x36, 0x31, 0x30, 0x33, 0x31, + 0x31, 0x31, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x30, + 0x34, 0x30, 0x37, 0x31, 0x30, 0x33, 0x31, 0x31, + 0x31, 0x5a, 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, + 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, + 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, + 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, + 0x32, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x30, 0x81, 0x9f, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, + 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, + 0x00, 0xd5, 0x15, 0x5b, 0x98, 0xc3, 0x69, 0x79, + 0xf6, 0x59, 0xa8, 0x5d, 0xa3, 0x23, 0xdd, 0x9d, + 0x25, 0xa9, 0xec, 0x1e, 0xa4, 0xe6, 0xbf, 0xf7, + 0x07, 0x3a, 0x85, 0xa7, 0x6e, 0xad, 0x80, 0x94, + 0x94, 0xf1, 0x78, 0xa7, 0x27, 0x33, 0x9d, 0x50, + 0x2e, 0x36, 0x1f, 0x34, 0x7b, 0x44, 0xa0, 0x18, + 0xa8, 0xe1, 0x66, 0x01, 0x8d, 0x8f, 0x21, 0x95, + 0x39, 0xdf, 0xec, 0x37, 0xe5, 0x87, 0xb6, 0xf5, + 0x5c, 0x95, 0xaa, 0x6f, 0x83, 0xe7, 0x74, 0x6a, + 0x15, 0x0f, 0x52, 0x60, 0xad, 0x65, 0x61, 0x32, + 0xbe, 0xe0, 0xe1, 0x28, 0x0c, 0x18, 0x95, 0x68, + 0x46, 0x06, 0x8b, 0xb0, 0x38, 0x4d, 0xfc, 0xce, + 0xcb, 0x4d, 0xa9, 0x41, 0xae, 0x42, 0x7a, 0x31, + 0xdb, 0xd9, 0x00, 0xa2, 0x78, 0x2e, 0x73, 0x93, + 0x70, 0x90, 0x51, 0x1b, 0x1a, 0x2b, 0xf0, 0xde, + 0xca, 0x22, 0x4f, 0xc1, 0xf7, 0x3d, 0xbc, 0xef, + 0xd3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, + 0x01, 0x0e, 0x30, 0x82, 0x01, 0x0a, 0x30, 0x1d, + 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, + 0x14, 0x41, 0x24, 0x7d, 0x36, 0xf7, 0x75, 0x00, + 0x23, 0xa4, 0xbe, 0x6a, 0xb2, 0x77, 0xda, 0x83, + 0x58, 0x4a, 0xb3, 0xf8, 0xc6, 0x30, 0x6f, 0x06, + 0x03, 0x55, 0x1d, 0x23, 0x04, 0x68, 0x30, 0x66, + 0x80, 0x14, 0x41, 0x24, 0x7d, 0x36, 0xf7, 0x75, + 0x00, 0x23, 0xa4, 0xbe, 0x6a, 0xb2, 0x77, 0xda, + 0x83, 0x58, 0x4a, 0xb3, 0xf8, 0xc6, 0xa1, 0x3c, + 0xa4, 0x3a, 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, + 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, + 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, + 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, + 0x32, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x82, 0x10, 0x7b, 0x41, + 0xd7, 0x76, 0xcb, 0x6a, 0x2b, 0x41, 0x94, 0x07, + 0x96, 0xc9, 0xf8, 0x03, 0xd9, 0xdc, 0x30, 0x0c, + 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, + 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06, 0x03, + 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, + 0x03, 0x02, 0x02, 0xf4, 0x30, 0x20, 0x06, 0x03, + 0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x16, + 0x30, 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, + 0x05, 0x07, 0x03, 0x01, 0x06, 0x08, 0x2b, 0x06, + 0x01, 0x05, 0x05, 0x07, 0x03, 0x02, 0x30, 0x38, + 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x31, 0x30, + 0x2f, 0x86, 0x20, 0x75, 0x72, 0x6e, 0x3a, 0x58, + 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, + 0x32, 0x32, 0x3a, 0x55, 0x41, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x82, 0x0b, 0x58, 0x4c, 0x45, + 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, + 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, + 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, + 0x81, 0x81, 0x00, 0x25, 0xd5, 0x0b, 0x8e, 0xa8, + 0xb6, 0x41, 0xeb, 0x01, 0x8b, 0x9a, 0xf2, 0xaa, + 0x34, 0x40, 0x26, 0xd3, 0xec, 0xff, 0xd2, 0x9f, + 0x97, 0xc0, 0xb4, 0x6d, 0x9f, 0xfb, 0x16, 0x5e]); +exports.peer1_9 = new Buffer([ + 0x02, 0x71, 0x7d, 0x42, 0x67, 0xbb, 0x60, 0xb0, + 0x04, 0xea, 0x6c, 0xdb, 0xad, 0x48, 0xb1, 0x3a, + 0x45, 0x0f, 0xa8, 0x9b, 0x35, 0x6c, 0x48, 0x00, + 0xd8, 0x2e, 0xa9, 0x83, 0x61, 0x32, 0xa8, 0x21, + 0x98, 0x7d, 0x28, 0xd8, 0x75, 0x1d, 0x77, 0x6a, + 0xc1, 0x9b, 0xd3, 0x8c, 0x39, 0x4d, 0x9e, 0xd9, + 0x30, 0xcb, 0xd6, 0x04, 0xb3, 0x13, 0xd2, 0x53, + 0xad, 0xdf, 0x59, 0xb6, 0x82, 0x41, 0x20, 0x94, + 0xe3, 0x12, 0xf1, 0x0d, 0x3f, 0x3e, 0x92, 0xbe, + 0xce, 0xba, 0xb4, 0x16, 0xdd, 0x23, 0x4a, 0x15, + 0x2a, 0x7e, 0xa9, 0x27, 0xd5, 0xc6, 0x78, 0x0a, + 0x88, 0xbf, 0x21, 0x29, 0x00, 0xce, 0x87, 0x0c, + 0x91, 0x42, 0xb9, 0x03, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, + 0x73, 0x69, 0x63, 0x31, 0x32, 0x38, 0x52, 0x73, + 0x61, 0x31, 0x35, 0x04, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, + 0x31, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x00, 0x00, + 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, 0x73, 0x69, + 0x63, 0x32, 0x35, 0x36, 0x01, 0x00, 0x00, 0x00, + 0x32, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x00, 0x00, + 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, 0x73, 0x69, + 0x63, 0x32, 0x35, 0x36, 0x01, 0x00, 0x00, 0x00, + 0x33, 0x03, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, + 0x00, 0x75, 0x72, 0x6e, 0x3a, 0x6f, 0x61, 0x73, + 0x69, 0x73, 0x3a, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x3a, 0x74, 0x63, 0x3a, 0x53, 0x41, 0x4d, 0x4c, + 0x3a, 0x31, 0x2e, 0x30, 0x3a, 0x61, 0x73, 0x73, + 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x41, + 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, + 0xff, 0xff, 0xff, 0xff, 0x33, 0x00, 0x00, 0x00, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, + 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79 ]); +exports.peer1_10 = new Buffer([ + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, + 0x61, 0x73, 0x69, 0x63, 0x32, 0x35, 0x36, 0x4a, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2d, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, + 0x2f, 0x73, 0x6f, 0x61, 0x70, 0x68, 0x74, 0x74, + 0x70, 0x2d, 0x77, 0x73, 0x73, 0x63, 0x2d, 0x75, + 0x61, 0x78, 0x6d, 0x6c, 0x2d, 0x75, 0x61, 0x62, + 0x69, 0x6e, 0x61, 0x72, 0x79, 0x03, 0x29, 0x00, + 0x00, 0x00, 0x6e, 0x65, 0x74, 0x2e, 0x74, 0x63, + 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, + 0x32, 0x31, 0x34, 0x2f, 0x55, 0x41, 0x2f, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x20, 0x00, 0x00, 0x00, 0x75, + 0x72, 0x6e, 0x3a, 0x58, 0x4c, 0x45, 0x55, 0x52, + 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x3a, 0x55, + 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x29, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2f, 0x02, 0x10, 0x00, 0x00, + 0x00, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x00, 0x00, + 0x00, 0x29, 0x00, 0x00, 0x00, 0x6f, 0x70, 0x63, + 0x2e, 0x74, 0x63, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, + 0x3a, 0x36, 0x31, 0x32, 0x31, 0x30, 0x2f, 0x55, + 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x30, 0x00, + 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, + 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x31, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x27, 0x00, 0x00, 0x00, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, + 0x36, 0x31, 0x32, 0x31, 0x32, 0x2f, 0x55, 0x41, + 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x26, 0x00, 0x00, + 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, + 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x33, 0x2f, + 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x33, + 0x00, 0x00, 0x00, 0x6e, 0x65, 0x74, 0x2e, 0x74, + 0x63, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, + 0x31, 0x32, 0x31, 0x34, 0x2f, 0x55, 0x41, 0x2f, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x00, + 0x00, 0x00, 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x69, + 0x70, 0x65, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x55, + 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, + 0x09, 0x03, 0x00, 0x00, 0x30, 0x82, 0x03, 0x05, + 0x30, 0x82, 0x02, 0x6e, 0xa0, 0x03, 0x02, 0x01, + 0x02, 0x02, 0x10, 0x7b, 0x41, 0xd7, 0x76, 0xcb, + 0x6a, 0x2b, 0x41, 0x94, 0x07, 0x96, 0xc9, 0xf8, + 0x03, 0xd9, 0xdc, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, + 0x05, 0x00, 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, + 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, + 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, + 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, + 0x32, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x30, 0x1e, 0x17, 0x0d, + 0x31, 0x32, 0x30, 0x38, 0x31, 0x36, 0x31, 0x30, + 0x33, 0x31, 0x31, 0x31, 0x5a, 0x17, 0x0d, 0x33, + 0x37, 0x30, 0x34, 0x30, 0x37, 0x31, 0x30, 0x33, + 0x31, 0x31, 0x31, 0x5a, 0x30, 0x38, 0x31, 0x1b, + 0x30, 0x19, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, + 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, + 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, + 0x30, 0x32, 0x32, 0x31, 0x19, 0x30, 0x17, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x55, 0x41, + 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x30, 0x81, + 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, + 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, + 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, + 0x81, 0x81, 0x00, 0xd5, 0x15, 0x5b, 0x98, 0xc3, + 0x69, 0x79, 0xf6, 0x59, 0xa8, 0x5d, 0xa3, 0x23, + 0xdd, 0x9d, 0x25, 0xa9, 0xec, 0x1e, 0xa4, 0xe6, + 0xbf, 0xf7, 0x07, 0x3a, 0x85, 0xa7, 0x6e, 0xad, + 0x80, 0x94, 0x94, 0xf1, 0x78, 0xa7, 0x27, 0x33, + 0x9d, 0x50, 0x2e, 0x36, 0x1f, 0x34, 0x7b, 0x44, + 0xa0, 0x18, 0xa8, 0xe1, 0x66, 0x01, 0x8d, 0x8f, + 0x21, 0x95, 0x39, 0xdf, 0xec, 0x37, 0xe5, 0x87, + 0xb6, 0xf5, 0x5c, 0x95, 0xaa, 0x6f, 0x83, 0xe7, + 0x74, 0x6a, 0x15, 0x0f, 0x52, 0x60, 0xad, 0x65, + 0x61, 0x32, 0xbe, 0xe0, 0xe1, 0x28, 0x0c, 0x18, + 0x95, 0x68, 0x46, 0x06, 0x8b, 0xb0, 0x38, 0x4d, + 0xfc, 0xce, 0xcb, 0x4d, 0xa9, 0x41, 0xae, 0x42, + 0x7a, 0x31, 0xdb, 0xd9, 0x00, 0xa2, 0x78, 0x2e, + 0x73, 0x93, 0x70, 0x90, 0x51, 0x1b, 0x1a, 0x2b, + 0xf0, 0xde, 0xca, 0x22, 0x4f, 0xc1, 0xf7, 0x3d, + 0xbc, 0xef, 0xd3, 0x02, 0x03, 0x01, 0x00, 0x01, + 0xa3, 0x82, 0x01, 0x0e, 0x30, 0x82, 0x01, 0x0a, + 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, + 0x16, 0x04, 0x14, 0x41, 0x24, 0x7d, 0x36, 0xf7, + 0x75, 0x00, 0x23, 0xa4, 0xbe, 0x6a, 0xb2, 0x77, + 0xda, 0x83, 0x58, 0x4a, 0xb3, 0xf8, 0xc6, 0x30, + 0x6f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x68, + 0x30, 0x66, 0x80, 0x14, 0x41, 0x24, 0x7d, 0x36, + 0xf7, 0x75, 0x00, 0x23, 0xa4, 0xbe, 0x6a, 0xb2, + 0x77, 0xda, 0x83, 0x58, 0x4a, 0xb3, 0xf8, 0xc6, + 0xa1, 0x3c, 0xa4, 0x3a, 0x30, 0x38, 0x31, 0x1b, + 0x30, 0x19, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, + 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, + 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, + 0x30, 0x32, 0x32, 0x31, 0x19, 0x30, 0x17, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x55, 0x41]); +exports.peer1_11 = new Buffer([ + 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x82, 0x10, + 0x7b, 0x41, 0xd7, 0x76, 0xcb, 0x6a, 0x2b, 0x41, + 0x94, 0x07, 0x96, 0xc9, 0xf8, 0x03, 0xd9, 0xdc, + 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, + 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, + 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, + 0x04, 0x04, 0x03, 0x02, 0x02, 0xf4, 0x30, 0x20, + 0x06, 0x03, 0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, + 0x04, 0x16, 0x30, 0x14, 0x06, 0x08, 0x2b, 0x06, + 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x06, 0x08, + 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x02, + 0x30, 0x38, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, + 0x31, 0x30, 0x2f, 0x86, 0x20, 0x75, 0x72, 0x6e, + 0x3a, 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, + 0x31, 0x30, 0x32, 0x32, 0x3a, 0x55, 0x41, 0x20, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x82, 0x0b, 0x58, + 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, + 0x32, 0x32, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, + 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, + 0x00, 0x03, 0x81, 0x81, 0x00, 0x25, 0xd5, 0x0b, + 0x8e, 0xa8, 0xb6, 0x41, 0xeb, 0x01, 0x8b, 0x9a, + 0xf2, 0xaa, 0x34, 0x40, 0x26, 0xd3, 0xec, 0xff, + 0xd2, 0x9f, 0x97, 0xc0, 0xb4, 0x6d, 0x9f, 0xfb, + 0x16, 0x5e, 0x02, 0x71, 0x7d, 0x42, 0x67, 0xbb, + 0x60, 0xb0, 0x04, 0xea, 0x6c, 0xdb, 0xad, 0x48, + 0xb1, 0x3a, 0x45, 0x0f, 0xa8, 0x9b, 0x35, 0x6c, + 0x48, 0x00, 0xd8, 0x2e, 0xa9, 0x83, 0x61, 0x32, + 0xa8, 0x21, 0x98, 0x7d, 0x28, 0xd8, 0x75, 0x1d, + 0x77, 0x6a, 0xc1, 0x9b, 0xd3, 0x8c, 0x39, 0x4d, + 0x9e, 0xd9, 0x30, 0xcb, 0xd6, 0x04, 0xb3, 0x13, + 0xd2, 0x53, 0xad, 0xdf, 0x59, 0xb6, 0x82, 0x41, + 0x20, 0x94, 0xe3, 0x12, 0xf1, 0x0d, 0x3f, 0x3e, + 0x92, 0xbe, 0xce, 0xba, 0xb4, 0x16, 0xdd, 0x23, + 0x4a, 0x15, 0x2a, 0x7e, 0xa9, 0x27, 0xd5, 0xc6, + 0x78, 0x0a, 0x88, 0xbf, 0x21, 0x29, 0x00, 0xce, + 0x87, 0x0c, 0x91, 0x42, 0xb9, 0x03, 0x00, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, + 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, + 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x23, + 0x42, 0x61, 0x73, 0x69, 0x63, 0x31, 0x32, 0x38, + 0x52, 0x73, 0x61, 0x31, 0x35, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, + 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6f, 0x72, 0x67, 0x2f]); +exports.peer1_12 = new Buffer([ + 0x55, 0x41, 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x23, 0x42, 0x61, 0x73, 0x69, 0x63, 0x32, + 0x35, 0x36, 0x01, 0x00, 0x00, 0x00, 0x32, 0x02, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x33, 0x00, 0x00, 0x00, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, + 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, + 0x55, 0x41, 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x23, 0x42, 0x61, 0x73, 0x69, 0x63, 0x32, + 0x35, 0x36, 0x01, 0x00, 0x00, 0x00, 0x33, 0x03, + 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x75, + 0x72, 0x6e, 0x3a, 0x6f, 0x61, 0x73, 0x69, 0x73, + 0x3a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x3a, 0x74, + 0x63, 0x3a, 0x53, 0x41, 0x4d, 0x4c, 0x3a, 0x31, + 0x2e, 0x30, 0x3a, 0x61, 0x73, 0x73, 0x65, 0x72, + 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x41, 0x73, 0x73, + 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0xff, 0xff, + 0xff, 0xff, 0x33, 0x00, 0x00, 0x00, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, + 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, + 0x41, 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x23, 0x42, 0x61, 0x73, 0x69, 0x63, 0x32, 0x35, + 0x36, 0x4a, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, + 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, + 0x2d, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, + 0x72, 0x74, 0x2f, 0x73, 0x6f, 0x61, 0x70, 0x68, + 0x74, 0x74, 0x70, 0x2d, 0x77, 0x73, 0x73, 0x63, + 0x2d, 0x75, 0x61, 0x78, 0x6d, 0x6c, 0x2d, 0x75, + 0x61, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x03, + 0x24, 0x00, 0x00, 0x00, 0x6e, 0x65, 0x74, 0x2e, + 0x70, 0x69, 0x70, 0x65, 0x3a, 0x2f, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x20, 0x00, 0x00, 0x00, 0x75, 0x72, 0x6e, 0x3a, + 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, + 0x30, 0x32, 0x32, 0x3a, 0x55, 0x41, 0x20, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x29, 0x00, 0x00, 0x00, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, + 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x2f, 0x02, 0x10, 0x00, 0x00, 0x00, 0x55, 0x41, + 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x02, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0x29, 0x00, + 0x00, 0x00, 0x6f, 0x70, 0x63, 0x2e, 0x74, 0x63, + 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, + 0x32, 0x31, 0x30, 0x2f, 0x55, 0x41, 0x2f, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x30, 0x00, 0x00, 0x00, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, + 0x36, 0x31, 0x32, 0x31, 0x31, 0x2f, 0x55, 0x41, + 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x27, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, + 0x31, 0x32, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x26, 0x00, 0x00, 0x00, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, + 0x31, 0x32, 0x31, 0x33, 0x2f, 0x55, 0x41, 0x2f, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x33, 0x00, 0x00, 0x00, + 0x6e, 0x65, 0x74, 0x2e, 0x74, 0x63, 0x70, 0x3a, + 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, + 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, + 0x34, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x79, 0x2e, 0x00, 0x00, 0x00, 0x6e, + 0x65, 0x74, 0x2e, 0x70, 0x69, 0x70, 0x65, 0x3a, + 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, + 0x6f, 0x73, 0x74, 0x2f, 0x55, 0x41, 0x2f, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x79, 0x09, 0x03, 0x00, + 0x00, 0x30, 0x82, 0x03, 0x05, 0x30, 0x82, 0x02, + 0x6e, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, + 0x7b, 0x41, 0xd7, 0x76, 0xcb, 0x6a, 0x2b, 0x41, + 0x94, 0x07, 0x96, 0xc9, 0xf8, 0x03, 0xd9, 0xdc, + 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, + 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, + 0x38, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x0a, 0x09, + 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, + 0x19, 0x16, 0x0b, 0x58, 0x4c, 0x45, 0x55, 0x52, + 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x31, 0x19, + 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, + 0x10, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x32, 0x30, + 0x38, 0x31, 0x36, 0x31, 0x30, 0x33, 0x31, 0x31, + 0x31, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x30, 0x34, + 0x30, 0x37, 0x31, 0x30, 0x33, 0x31, 0x31, 0x31, + 0x5a, 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, 0x06, + 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, + 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, 0x45, + 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, + 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x30, 0x81, 0x9f, 0x30, 0x0d, + 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, + 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, + 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, + 0xd5, 0x15, 0x5b, 0x98, 0xc3, 0x69, 0x79, 0xf6, + 0x59, 0xa8, 0x5d, 0xa3, 0x23, 0xdd, 0x9d, 0x25, + 0xa9, 0xec, 0x1e, 0xa4, 0xe6, 0xbf, 0xf7, 0x07, + 0x3a, 0x85, 0xa7, 0x6e, 0xad, 0x80, 0x94, 0x94, + 0xf1, 0x78, 0xa7, 0x27, 0x33, 0x9d, 0x50, 0x2e, + 0x36, 0x1f, 0x34, 0x7b, 0x44, 0xa0, 0x18, 0xa8, + 0xe1, 0x66, 0x01, 0x8d, 0x8f, 0x21, 0x95, 0x39]); +exports.peer1_13 = new Buffer([ + 0xdf, 0xec, 0x37, 0xe5, 0x87, 0xb6, 0xf5, 0x5c, + 0x95, 0xaa, 0x6f, 0x83, 0xe7, 0x74, 0x6a, 0x15, + 0x0f, 0x52, 0x60, 0xad, 0x65, 0x61, 0x32, 0xbe, + 0xe0, 0xe1, 0x28, 0x0c, 0x18, 0x95, 0x68, 0x46, + 0x06, 0x8b, 0xb0, 0x38, 0x4d, 0xfc, 0xce, 0xcb, + 0x4d, 0xa9, 0x41, 0xae, 0x42, 0x7a, 0x31, 0xdb, + 0xd9, 0x00, 0xa2, 0x78, 0x2e, 0x73, 0x93, 0x70, + 0x90, 0x51, 0x1b, 0x1a, 0x2b, 0xf0, 0xde, 0xca, + 0x22, 0x4f, 0xc1, 0xf7, 0x3d, 0xbc, 0xef, 0xd3, + 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, + 0x0e, 0x30, 0x82, 0x01, 0x0a, 0x30, 0x1d, 0x06, + 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, + 0x41, 0x24, 0x7d, 0x36, 0xf7, 0x75, 0x00, 0x23, + 0xa4, 0xbe, 0x6a, 0xb2, 0x77, 0xda, 0x83, 0x58, + 0x4a, 0xb3, 0xf8, 0xc6, 0x30, 0x6f, 0x06, 0x03, + 0x55, 0x1d, 0x23, 0x04, 0x68, 0x30, 0x66, 0x80, + 0x14, 0x41, 0x24, 0x7d, 0x36, 0xf7, 0x75, 0x00, + 0x23, 0xa4, 0xbe, 0x6a, 0xb2, 0x77, 0xda, 0x83, + 0x58, 0x4a, 0xb3, 0xf8, 0xc6, 0xa1, 0x3c, 0xa4, + 0x3a, 0x30, 0x38, 0x31, 0x1b, 0x30, 0x19, 0x06, + 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, 0xf2, 0x2c, + 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, 0x4c, 0x45, + 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, + 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x13, 0x10, 0x55, 0x41, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x82, 0x10, 0x7b, 0x41, 0xd7, + 0x76, 0xcb, 0x6a, 0x2b, 0x41, 0x94, 0x07, 0x96, + 0xc9, 0xf8, 0x03, 0xd9, 0xdc, 0x30, 0x0c, 0x06, + 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, + 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06, 0x03, 0x55, + 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, + 0x02, 0x02, 0xf4, 0x30, 0x20, 0x06, 0x03, 0x55, + 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x16, 0x30, + 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, + 0x07, 0x03, 0x01, 0x06, 0x08, 0x2b, 0x06, 0x01, + 0x05, 0x05, 0x07, 0x03, 0x02, 0x30, 0x38, 0x06, + 0x03, 0x55, 0x1d, 0x11, 0x04, 0x31, 0x30, 0x2f, + 0x86, 0x20, 0x75, 0x72, 0x6e, 0x3a, 0x58, 0x4c, + 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, + 0x32, 0x3a, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x82, 0x0b, 0x58, 0x4c, 0x45, 0x55, + 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x81, + 0x81, 0x00, 0x25, 0xd5, 0x0b, 0x8e, 0xa8, 0xb6, + 0x41, 0xeb, 0x01, 0x8b, 0x9a, 0xf2, 0xaa, 0x34, + 0x40, 0x26, 0xd3, 0xec, 0xff, 0xd2, 0x9f, 0x97, + 0xc0, 0xb4, 0x6d, 0x9f, 0xfb, 0x16, 0x5e, 0x02, + 0x71, 0x7d, 0x42, 0x67, 0xbb, 0x60, 0xb0, 0x04, + 0xea, 0x6c, 0xdb, 0xad, 0x48, 0xb1, 0x3a, 0x45, + 0x0f, 0xa8, 0x9b, 0x35, 0x6c, 0x48, 0x00, 0xd8, + 0x2e, 0xa9, 0x83, 0x61, 0x32, 0xa8, 0x21, 0x98, + 0x7d, 0x28, 0xd8, 0x75 ]); +exports.peer1_14 = new Buffer([ + 0x1d, 0x77, 0x6a, 0xc1, 0x9b, 0xd3, 0x8c, 0x39, + 0x4d, 0x9e, 0xd9, 0x30, 0xcb, 0xd6, 0x04, 0xb3, + 0x13, 0xd2, 0x53, 0xad, 0xdf, 0x59, 0xb6, 0x82, + 0x41, 0x20, 0x94, 0xe3, 0x12, 0xf1, 0x0d, 0x3f, + 0x3e, 0x92, 0xbe, 0xce, 0xba, 0xb4, 0x16, 0xdd, + 0x23, 0x4a, 0x15, 0x2a, 0x7e, 0xa9, 0x27, 0xd5, + 0xc6, 0x78, 0x0a, 0x88, 0xbf, 0x21, 0x29, 0x00, + 0xce, 0x87, 0x0c, 0x91, 0x42, 0xb9, 0x03, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, + 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, + 0x41, 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x23, 0x42, 0x61, 0x73, 0x69, 0x63, 0x31, 0x32, + 0x38, 0x52, 0x73, 0x61, 0x31, 0x35, 0x04, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, + 0x00, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x33, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, + 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, + 0x61, 0x73, 0x69, 0x63, 0x32, 0x35, 0x36, 0x01, + 0x00, 0x00, 0x00, 0x32, 0x02, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x33, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, + 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, + 0x61, 0x73, 0x69, 0x63, 0x32, 0x35, 0x36, 0x01, + 0x00, 0x00, 0x00, 0x33, 0x03, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x75, 0x72, 0x6e, 0x3a, + 0x6f, 0x61, 0x73, 0x69, 0x73, 0x3a, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x3a, 0x74, 0x63, 0x3a, 0x53, + 0x41, 0x4d, 0x4c, 0x3a, 0x31, 0x2e, 0x30, 0x3a, + 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, + 0x6e, 0x3a, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, + 0x69, 0x6f, 0x6e, 0xff, 0xff, 0xff, 0xff, 0x33, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, + 0x73, 0x69, 0x63, 0x32, 0x35, 0x36, 0x4a, 0x00, + 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2d, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2f, + 0x73, 0x6f, 0x61, 0x70, 0x68, 0x74, 0x74, 0x70, + 0x2d, 0x77, 0x73, 0x73, 0x63, 0x2d, 0x75, 0x61, + 0x78, 0x6d, 0x6c, 0x2d, 0x75, 0x61, 0x62, 0x69, + 0x6e, 0x61, 0x72, 0x79, 0x03, 0x2b, 0x00, 0x00, + 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, + 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x31, 0x2f, + 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, + 0x4e, 0x6f, 0x6e, 0x65, 0x20, 0x00, 0x00, 0x00, + 0x75, 0x72, 0x6e, 0x3a, 0x58, 0x4c, 0x45, 0x55, + 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x3a, + 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x29, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, + 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x02, 0x10, 0x00, + 0x00, 0x00, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0x00, + 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x6f, 0x70, + 0x63, 0x2e, 0x74, 0x63, 0x70, 0x3a, 0x2f, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, + 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x30, 0x2f, + 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x30, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, + 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, + 0x31, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x79, 0x27, 0x00, 0x00, 0x00, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, + 0x3a, 0x36, 0x31, 0x32, 0x31, 0x32, 0x2f, 0x55, + 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x26, 0x00, + 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, + 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x33, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x33, 0x00, 0x00, 0x00, 0x6e, 0x65, 0x74, 0x2e, + 0x74, 0x63, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, + 0x36, 0x31, 0x32, 0x31, 0x34, 0x2f, 0x55, 0x41, + 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, + 0x00, 0x00, 0x00, 0x6e, 0x65, 0x74, 0x2e, 0x70, + 0x69, 0x70, 0x65, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x2f, + 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x79, 0x09, 0x03, 0x00, 0x00, 0x30, 0x82, 0x03, + 0x05, 0x30, 0x82, 0x02, 0x6e, 0xa0, 0x03, 0x02, + 0x01, 0x02, 0x02, 0x10, 0x7b, 0x41, 0xd7, 0x76, + 0xcb, 0x6a, 0x2b, 0x41, 0x94, 0x07, 0x96, 0xc9, + 0xf8, 0x03, 0xd9, 0xdc, 0x30, 0x0d, 0x06, 0x09, + 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, + 0x05, 0x05, 0x00, 0x30, 0x38, 0x31, 0x1b, 0x30, + 0x19, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, 0x93, + 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, 0x58, + 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30]); +exports.peer1_15 = new Buffer([ + 0x32, 0x32, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x13, 0x10, 0x55, 0x41, 0x20, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x30, 0x1e, 0x17, + 0x0d, 0x31, 0x32, 0x30, 0x38, 0x31, 0x36, 0x31, + 0x30, 0x33, 0x31, 0x31, 0x31, 0x5a, 0x17, 0x0d, + 0x33, 0x37, 0x30, 0x34, 0x30, 0x37, 0x31, 0x30, + 0x33, 0x31, 0x31, 0x31, 0x5a, 0x30, 0x38, 0x31, + 0x1b, 0x30, 0x19, 0x06, 0x0a, 0x09, 0x92, 0x26, + 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, + 0x0b, 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, + 0x31, 0x30, 0x32, 0x32, 0x31, 0x19, 0x30, 0x17, + 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x55, + 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x30, + 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, + 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, + 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, + 0x02, 0x81, 0x81, 0x00, 0xd5, 0x15, 0x5b, 0x98, + 0xc3, 0x69, 0x79, 0xf6, 0x59, 0xa8, 0x5d, 0xa3, + 0x23, 0xdd, 0x9d, 0x25, 0xa9, 0xec, 0x1e, 0xa4, + 0xe6, 0xbf, 0xf7, 0x07, 0x3a, 0x85, 0xa7, 0x6e, + 0xad, 0x80, 0x94, 0x94, 0xf1, 0x78, 0xa7, 0x27, + 0x33, 0x9d, 0x50, 0x2e, 0x36, 0x1f, 0x34, 0x7b, + 0x44, 0xa0, 0x18, 0xa8, 0xe1, 0x66, 0x01, 0x8d, + 0x8f, 0x21, 0x95, 0x39, 0xdf, 0xec, 0x37, 0xe5, + 0x87, 0xb6, 0xf5, 0x5c, 0x95, 0xaa, 0x6f, 0x83, + 0xe7, 0x74, 0x6a, 0x15, 0x0f, 0x52, 0x60, 0xad, + 0x65, 0x61, 0x32, 0xbe, 0xe0, 0xe1, 0x28, 0x0c, + 0x18, 0x95, 0x68, 0x46, 0x06, 0x8b, 0xb0, 0x38, + 0x4d, 0xfc, 0xce, 0xcb, 0x4d, 0xa9, 0x41, 0xae, + 0x42, 0x7a, 0x31, 0xdb, 0xd9, 0x00, 0xa2, 0x78, + 0x2e, 0x73, 0x93, 0x70, 0x90, 0x51, 0x1b, 0x1a, + 0x2b, 0xf0, 0xde, 0xca, 0x22, 0x4f, 0xc1, 0xf7, + 0x3d, 0xbc, 0xef, 0xd3, 0x02, 0x03, 0x01, 0x00, + 0x01, 0xa3, 0x82, 0x01, 0x0e, 0x30, 0x82, 0x01, + 0x0a, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, + 0x04, 0x16, 0x04, 0x14, 0x41, 0x24, 0x7d, 0x36, + 0xf7, 0x75, 0x00, 0x23, 0xa4, 0xbe, 0x6a, 0xb2, + 0x77, 0xda, 0x83, 0x58, 0x4a, 0xb3, 0xf8, 0xc6, + 0x30, 0x6f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, + 0x68, 0x30, 0x66, 0x80, 0x14, 0x41, 0x24, 0x7d, + 0x36, 0xf7, 0x75, 0x00, 0x23, 0xa4, 0xbe, 0x6a, + 0xb2, 0x77, 0xda, 0x83, 0x58, 0x4a, 0xb3, 0xf8, + 0xc6, 0xa1, 0x3c, 0xa4, 0x3a, 0x30, 0x38, 0x31, + 0x1b, 0x30, 0x19, 0x06, 0x0a, 0x09, 0x92, 0x26, + 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, + 0x0b, 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, + 0x31, 0x30, 0x32, 0x32, 0x31, 0x19, 0x30, 0x17, + 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x55, + 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x82, + 0x10, 0x7b, 0x41, 0xd7, 0x76, 0xcb, 0x6a, 0x2b, + 0x41, 0x94, 0x07, 0x96, 0xc9, 0xf8, 0x03, 0xd9, + 0xdc, 0x30, 0x0c, 0x06 ]); +exports.peer1_16 = new Buffer([ + 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, + 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06, 0x03, 0x55, + 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, + 0x02, 0x02, 0xf4, 0x30, 0x20, 0x06, 0x03, 0x55, + 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x16, 0x30, + 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, + 0x07, 0x03, 0x01, 0x06, 0x08, 0x2b, 0x06, 0x01, + 0x05, 0x05, 0x07, 0x03, 0x02, 0x30, 0x38, 0x06, + 0x03, 0x55, 0x1d, 0x11, 0x04, 0x31, 0x30, 0x2f, + 0x86, 0x20, 0x75, 0x72, 0x6e, 0x3a, 0x58, 0x4c, + 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, + 0x32, 0x3a, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x82, 0x0b, 0x58, 0x4c, 0x45, 0x55, + 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x81, + 0x81, 0x00, 0x25, 0xd5, 0x0b, 0x8e, 0xa8, 0xb6, + 0x41, 0xeb, 0x01, 0x8b, 0x9a, 0xf2, 0xaa, 0x34, + 0x40, 0x26, 0xd3, 0xec, 0xff, 0xd2, 0x9f, 0x97, + 0xc0, 0xb4, 0x6d, 0x9f, 0xfb, 0x16, 0x5e, 0x02, + 0x71, 0x7d, 0x42, 0x67, 0xbb, 0x60, 0xb0, 0x04, + 0xea, 0x6c, 0xdb, 0xad, 0x48, 0xb1, 0x3a, 0x45, + 0x0f, 0xa8, 0x9b, 0x35, 0x6c, 0x48, 0x00, 0xd8, + 0x2e, 0xa9, 0x83, 0x61, 0x32, 0xa8, 0x21, 0x98, + 0x7d, 0x28, 0xd8, 0x75, 0x1d, 0x77, 0x6a, 0xc1, + 0x9b, 0xd3, 0x8c, 0x39, 0x4d, 0x9e, 0xd9, 0x30, + 0xcb, 0xd6, 0x04, 0xb3, 0x13, 0xd2, 0x53, 0xad, + 0xdf, 0x59, 0xb6, 0x82, 0x41, 0x20, 0x94, 0xe3, + 0x12, 0xf1, 0x0d, 0x3f, 0x3e, 0x92, 0xbe, 0xce, + 0xba, 0xb4, 0x16, 0xdd, 0x23, 0x4a, 0x15, 0x2a, + 0x7e, 0xa9, 0x27, 0xd5, 0xc6, 0x78, 0x0a, 0x88, + 0xbf, 0x21, 0x29, 0x00, 0xce, 0x87, 0x0c, 0x91, + 0x42, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x2f, 0x00, + 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x23, 0x4e, 0x6f, 0x6e, + 0x65, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x00, + 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, 0x73, + 0x69, 0x63, 0x32, 0x35, 0x36, 0x01, 0x00, 0x00, + 0x00, 0x31, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x00, + 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, 0x73, + 0x69, 0x63, 0x32, 0x35, 0x36, 0x01, 0x00, 0x00, + 0x00, 0x32, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x00, + 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, 0x73, + 0x69, 0x63, 0x32, 0x35, 0x36, 0x01, 0x00, 0x00, + 0x00, 0x33, 0x03, 0x00, 0x00, 0x00, 0x2f, 0x00, + 0x00, 0x00, 0x75, 0x72, 0x6e, 0x3a, 0x6f, 0x61, + 0x73, 0x69, 0x73, 0x3a, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x3a, 0x74, 0x63, 0x3a, 0x53, 0x41, 0x4d, + 0x4c, 0x3a, 0x31, 0x2e, 0x30, 0x3a, 0x61, 0x73, + 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x3a, + 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, + 0x6e, 0xff, 0xff, 0xff, 0xff, 0x33, 0x00, 0x00, + 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x23, 0x42, 0x61, 0x73, 0x69, + 0x63, 0x32, 0x35, 0x36, 0x4a, 0x00, 0x00, 0x00, + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, + 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, + 0x2f, 0x55, 0x41, 0x2d, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x2f, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x73, 0x6f, + 0x61, 0x70, 0x68, 0x74, 0x74, 0x70, 0x2d, 0x77, + 0x73, 0x73, 0x63, 0x2d, 0x75, 0x61, 0x78, 0x6d, + 0x6c, 0x2d, 0x75, 0x61, 0x62, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x6e, + 0x65, 0x74, 0x2e, 0x74, 0x63, 0x70, 0x3a, 0x2f, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, + 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x34, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x2f, 0x4e, 0x6f, 0x6e, 0x65, 0x20, 0x00, 0x00, + 0x00, 0x75, 0x72, 0x6e, 0x3a, 0x58, 0x4c, 0x45, + 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, + 0x3a, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x29, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, + 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, + 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x02, 0x10, + 0x00, 0x00, 0x00, 0x55, 0x41, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x02, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, + 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x6f, + 0x70, 0x63, 0x2e, 0x74, 0x63, 0x70, 0x3a, 0x2f, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, + 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x30, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x30, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, + 0x31, 0x31, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x27, 0x00, 0x00, 0x00, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73 ]); +exports.peer1_17 = new Buffer([ + 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x32, 0x2f, + 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x26, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, + 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, + 0x33, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x33, 0x00, 0x00, 0x00, 0x6e, 0x65, 0x74, + 0x2e, 0x74, 0x63, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, + 0x3a, 0x36, 0x31, 0x32, 0x31, 0x34, 0x2f, 0x55, + 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, + 0x2e, 0x00, 0x00, 0x00, 0x6e, 0x65, 0x74, 0x2e, + 0x70, 0x69, 0x70, 0x65, 0x3a, 0x2f, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x09, 0x03, 0x00, 0x00, 0x30, 0x82, + 0x03, 0x05, 0x30, 0x82, 0x02, 0x6e, 0xa0, 0x03, + 0x02, 0x01, 0x02, 0x02, 0x10, 0x7b, 0x41, 0xd7, + 0x76, 0xcb, 0x6a, 0x2b, 0x41, 0x94, 0x07, 0x96, + 0xc9, 0xf8, 0x03, 0xd9, 0xdc, 0x30, 0x0d, 0x06, + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, + 0x01, 0x05, 0x05, 0x00, 0x30, 0x38, 0x31, 0x1b, + 0x30, 0x19, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, + 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, + 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, + 0x30, 0x32, 0x32, 0x31, 0x19, 0x30, 0x17, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x55, 0x41, + 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x30, 0x1e, + 0x17, 0x0d, 0x31, 0x32, 0x30, 0x38, 0x31, 0x36, + 0x31, 0x30, 0x33, 0x31, 0x31, 0x31, 0x5a, 0x17, + 0x0d, 0x33, 0x37, 0x30, 0x34, 0x30, 0x37, 0x31, + 0x30, 0x33, 0x31, 0x31, 0x31, 0x5a, 0x30, 0x38, + 0x31, 0x1b, 0x30, 0x19, 0x06, 0x0a, 0x09, 0x92, + 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, + 0x16, 0x0b, 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, + 0x31, 0x31, 0x30, 0x32, 0x32, 0x31, 0x19, 0x30, + 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, + 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, + 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, + 0x89, 0x02, 0x81, 0x81, 0x00, 0xd5, 0x15, 0x5b, + 0x98, 0xc3, 0x69, 0x79, 0xf6, 0x59, 0xa8, 0x5d, + 0xa3, 0x23, 0xdd, 0x9d, 0x25, 0xa9, 0xec, 0x1e, + 0xa4, 0xe6, 0xbf, 0xf7, 0x07, 0x3a, 0x85, 0xa7, + 0x6e, 0xad, 0x80, 0x94, 0x94, 0xf1, 0x78, 0xa7, + 0x27, 0x33, 0x9d, 0x50]); +exports.peer1_18 = new Buffer([ + 0x5b, 0x35, 0x38, 0x34, 0x30, 0x20, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x20, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x63, + 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x20, 0x66, + 0x69, 0x6c, 0x65, 0x5d +]); +exports.peer1_19 = new Buffer([ + 0xff, 0x33, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, + 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, + 0x2f, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x23, + 0x42, 0x61, 0x73, 0x69, 0x63, 0x32, 0x35, 0x36, + 0x01, 0x00, 0x00, 0x00, 0x33, 0x03, 0x00, 0x00, + 0x00, 0x2f, 0x00, 0x00, 0x00, 0x75, 0x72, 0x6e, + 0x3a, 0x6f, 0x61, 0x73, 0x69, 0x73, 0x3a, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x3a, 0x74, 0x63, 0x3a, + 0x53, 0x41, 0x4d, 0x4c, 0x3a, 0x31, 0x2e, 0x30, + 0x3a, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, + 0x6f, 0x6e, 0x3a, 0x41, 0x73, 0x73, 0x65, 0x72, + 0x74, 0x69, 0x6f, 0x6e, 0xff, 0xff, 0xff, 0xff, + 0x33, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, + 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x23, 0x42, + 0x61, 0x73, 0x69, 0x63, 0x32, 0x35, 0x36, 0x46, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2d, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, + 0x2f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x2d, 0x75, + 0x61, 0x73, 0x6f, 0x61, 0x70, 0x78, 0x6d, 0x6c, + 0x2d, 0x75, 0x61, 0x62, 0x69, 0x6e, 0x61, 0x72, + 0x79, 0x00, 0x27, 0x00, 0x00, 0x00, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, + 0x31, 0x32, 0x31, 0x33, 0x2f, 0x55, 0x41, 0x2f, + 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x20, 0x00, 0x00, + 0x00, 0x75, 0x72, 0x6e, 0x3a, 0x58, 0x4c, 0x45, + 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, + 0x3a, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x29, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, + 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, 0x66, + 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, + 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x02, 0x10, + 0x00, 0x00, 0x00, 0x55, 0x41, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x02, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, + 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x6f, + 0x70, 0x63, 0x2e, 0x74, 0x63, 0x70, 0x3a, 0x2f, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, + 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x30, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x30, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, + 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, + 0x31, 0x31, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x27, 0x00, 0x00, 0x00, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, + 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, 0x32, 0x2f, + 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x26, + 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, + 0x2f, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, + 0x6f, 0x73, 0x74, 0x3a, 0x36, 0x31, 0x32, 0x31, + 0x33, 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x33, 0x00, 0x00, 0x00, 0x6e, 0x65, 0x74, + 0x2e, 0x74, 0x63, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, + 0x3a, 0x36, 0x31, 0x32, 0x31, 0x34, 0x2f, 0x55, + 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, + 0x2e, 0x00, 0x00, 0x00, 0x6e, 0x65, 0x74, 0x2e, + 0x70, 0x69, 0x70, 0x65, 0x3a, 0x2f, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, + 0x2f, 0x55, 0x41, 0x2f, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x09, 0x03, 0x00, 0x00, 0x30, 0x82, + 0x03, 0x05, 0x30, 0x82, 0x02, 0x6e, 0xa0, 0x03, + 0x02, 0x01, 0x02, 0x02, 0x10, 0x7b, 0x41, 0xd7, + 0x76, 0xcb, 0x6a, 0x2b, 0x41, 0x94, 0x07, 0x96, + 0xc9, 0xf8, 0x03, 0xd9, 0xdc, 0x30, 0x0d, 0x06, + 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, + 0x01, 0x05, 0x05, 0x00, 0x30, 0x38, 0x31, 0x1b, + 0x30, 0x19, 0x06, 0x0a, 0x09, 0x92, 0x26, 0x89, + 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, 0x16, 0x0b, + 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, + 0x30, 0x32, 0x32, 0x31, 0x19, 0x30, 0x17, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x55, 0x41, + 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x30, 0x1e, + 0x17, 0x0d, 0x31, 0x32, 0x30, 0x38, 0x31, 0x36, + 0x31, 0x30, 0x33, 0x31, 0x31, 0x31, 0x5a, 0x17, + 0x0d, 0x33, 0x37, 0x30, 0x34, 0x30, 0x37, 0x31, + 0x30, 0x33, 0x31, 0x31, 0x31, 0x5a, 0x30, 0x38, + 0x31, 0x1b, 0x30, 0x19, 0x06, 0x0a, 0x09, 0x92, + 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, + 0x16, 0x0b, 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, + 0x31, 0x31, 0x30, 0x32, 0x32, 0x31, 0x19, 0x30, + 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, + 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, + 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, + 0x89, 0x02, 0x81, 0x81, 0x00, 0xd5, 0x15, 0x5b, + 0x98, 0xc3, 0x69, 0x79, 0xf6, 0x59, 0xa8, 0x5d, + 0xa3, 0x23, 0xdd, 0x9d, 0x25, 0xa9, 0xec, 0x1e, + 0xa4, 0xe6, 0xbf, 0xf7, 0x07, 0x3a, 0x85, 0xa7, + 0x6e, 0xad, 0x80, 0x94, 0x94, 0xf1, 0x78, 0xa7, + 0x27, 0x33, 0x9d, 0x50, 0x2e, 0x36, 0x1f, 0x34, + 0x7b, 0x44, 0xa0, 0x18, 0xa8, 0xe1, 0x66, 0x01, + 0x8d, 0x8f, 0x21, 0x95, 0x39, 0xdf, 0xec, 0x37, + 0xe5, 0x87, 0xb6, 0xf5, 0x5c, 0x95, 0xaa, 0x6f, + 0x83, 0xe7, 0x74, 0x6a, 0x15, 0x0f, 0x52, 0x60, + 0xad, 0x65, 0x61, 0x32, 0xbe, 0xe0, 0xe1, 0x28, + 0x0c, 0x18, 0x95, 0x68, 0x46, 0x06, 0x8b, 0xb0, + 0x38, 0x4d, 0xfc, 0xce, 0xcb, 0x4d, 0xa9, 0x41 ]); +exports.peer1_20 = new Buffer([ + 0xae, 0x42, 0x7a, 0x31, 0xdb, 0xd9, 0x00, 0xa2, + 0x78, 0x2e, 0x73, 0x93, 0x70, 0x90, 0x51, 0x1b, + 0x1a, 0x2b, 0xf0, 0xde, 0xca, 0x22, 0x4f, 0xc1, + 0xf7, 0x3d, 0xbc, 0xef, 0xd3, 0x02, 0x03, 0x01, + 0x00, 0x01, 0xa3, 0x82, 0x01, 0x0e, 0x30, 0x82, + 0x01, 0x0a, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, + 0x0e, 0x04, 0x16, 0x04, 0x14, 0x41, 0x24, 0x7d, + 0x36, 0xf7, 0x75, 0x00, 0x23, 0xa4, 0xbe, 0x6a, + 0xb2, 0x77, 0xda, 0x83, 0x58, 0x4a, 0xb3, 0xf8, + 0xc6, 0x30, 0x6f, 0x06, 0x03, 0x55, 0x1d, 0x23, + 0x04, 0x68, 0x30, 0x66, 0x80, 0x14, 0x41, 0x24, + 0x7d, 0x36, 0xf7, 0x75, 0x00, 0x23, 0xa4, 0xbe, + 0x6a, 0xb2, 0x77, 0xda, 0x83, 0x58, 0x4a, 0xb3, + 0xf8, 0xc6, 0xa1, 0x3c, 0xa4, 0x3a, 0x30, 0x38, + 0x31, 0x1b, 0x30, 0x19, 0x06, 0x0a, 0x09, 0x92, + 0x26, 0x89, 0x93, 0xf2, 0x2c, 0x64, 0x01, 0x19, + 0x16, 0x0b, 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, + 0x31, 0x31, 0x30, 0x32, 0x32, 0x31, 0x19, 0x30, + 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, + 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x82, 0x10, 0x7b, 0x41, 0xd7, 0x76, 0xcb, 0x6a, + 0x2b, 0x41, 0x94, 0x07, 0x96, 0xc9, 0xf8, 0x03, + 0xd9, 0xdc, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, + 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, + 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, + 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x02, 0xf4, + 0x30, 0x20, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x01, + 0x01, 0xff, 0x04, 0x16, 0x30, 0x14, 0x06, 0x08, + 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, + 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, + 0x03, 0x02, 0x30, 0x38, 0x06, 0x03, 0x55, 0x1d, + 0x11, 0x04, 0x31, 0x30, 0x2f, 0x86, 0x20, 0x75, + 0x72, 0x6e, 0x3a, 0x58, 0x4c, 0x45, 0x55, 0x52, + 0x49, 0x31, 0x31, 0x30, 0x32, 0x32, 0x3a, 0x55, + 0x41, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x20, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x82, + 0x0b, 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, + 0x31, 0x30, 0x32, 0x32, 0x30, 0x0d, 0x06, 0x09, + 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, + 0x05, 0x05, 0x00, 0x03, 0x81, 0x81, 0x00, 0x25, + 0xd5, 0x0b, 0x8e, 0xa8, 0xb6, 0x41, 0xeb, 0x01, + 0x8b, 0x9a, 0xf2, 0xaa, 0x34, 0x40, 0x26, 0xd3, + 0xec, 0xff, 0xd2, 0x9f, 0x97, 0xc0, 0xb4, 0x6d, + 0x9f, 0xfb, 0x16, 0x5e, 0x02, 0x71, 0x7d, 0x42, + 0x67, 0xbb, 0x60, 0xb0, 0x04, 0xea, 0x6c, 0xdb, + 0xad, 0x48, 0xb1, 0x3a, 0x45, 0x0f, 0xa8, 0x9b, + 0x35, 0x6c, 0x48, 0x00, 0xd8, 0x2e, 0xa9, 0x83, + 0x61, 0x32, 0xa8, 0x21, 0x98, 0x7d, 0x28, 0xd8, + 0x75, 0x1d, 0x77, 0x6a, 0xc1, 0x9b, 0xd3, 0x8c, + 0x39, 0x4d, 0x9e, 0xd9, 0x30, 0xcb, 0xd6, 0x04, + 0xb3, 0x13, 0xd2, 0x53, 0xad, 0xdf, 0x59, 0xb6, + 0x82, 0x41, 0x20, 0x94, 0xe3, 0x12, 0xf1, 0x0d, + 0x3f, 0x3e, 0x92, 0xbe, 0xce, 0xba, 0xb4, 0x16, + 0xdd, 0x23, 0x4a, 0x15 ]); + +exports.peer0_4 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x8d, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0xd3, 0x01, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0x51, 0x6b, 0x78, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x02, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x66, 0x72, 0x2d, 0x46, 0x52, 0x01, + 0x00, 0x41, 0x01, 0x01, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x30, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff ]); +exports.peer1_21 = new Buffer([ + 0x5b, 0x35, 0x30, 0x34, 0x20, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x20, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x61, + 0x70, 0x74, 0x75, 0x72, 0x65, 0x20, 0x66, 0x69, + 0x6c, 0x65, 0x5d ]); +// -> CreateSessionResponse 21/21 +exports.peer1_22 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x60, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0xd6, 0x01, 0x7b, 0x2a, 0x7b, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xa6, 0xc4, 0xe2, 0x72, 0x3d, 0xed, 0x4d, 0x71, + 0x22, 0x70, 0x46, 0x8e, 0xb5, 0x95, 0x7c, 0xef, + 0x53, 0xe4, 0xb3, 0xb8, 0x14, 0x9e, 0x66, 0xb1, + 0xf5, 0x64, 0x24, 0x95, 0x20, 0xb0, 0xb0, 0x75, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]); + + +// -> CreateSessionResponse 14/xx + +exports.peer0_5 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x92, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x77, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0xce, 0xed, 0x7b, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x03, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, + 0xcf, 0x08, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x01, 0x00, 0xce, 0x08, 0x0d, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff ]); +exports.peer1_23 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0xe8, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x7a, 0x02, 0x09, 0xd4, 0x7e, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0d, 0x8c, 0x09, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x6f, 0x70, 0x63, 0x66, 0x6f, 0x75, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6f, + 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x20, 0x00, + 0x00, 0x00, 0x75, 0x72, 0x6e, 0x3a, 0x58, 0x4c, + 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, 0x30, 0x32, + 0x32, 0x3a, 0x55, 0x41, 0x20, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x18, 0x00, 0x00, 0x00, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x74, 0x65, 0x73, + 0x74, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, + 0x2f, 0x44, 0x61, 0x74, 0x61, 0x2f, 0x21, 0x00, + 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x44, 0x61, 0x74, + 0x61, 0x2f, 0x2f, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x23, 0x00, 0x00, 0x00, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, + 0x63, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, + 0x55, 0x41, 0x2f, 0x42, 0x6f, 0x69, 0x6c, 0x65, + 0x72, 0x2f, 0x2c, 0x00, 0x00, 0x00, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, + 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, + 0x41, 0x2f, 0x42, 0x6f, 0x69, 0x6c, 0x65, 0x72, + 0x2f, 0x2f, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x27, 0x00, 0x00, 0x00, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6f, 0x70, 0x63, + 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x55, + 0x41, 0x2f, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, + 0x73, 0x74, 0x69, 0x63, 0x73, 0x22, 0x00, 0x00, + 0x00, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x2b, 0x00, 0x00, 0x00, 0x68, + 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x6f, 0x72, + 0x67, 0x2f, 0x55, 0x41, 0x2f, 0x6d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x62, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x2f, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0xa6, 0xe9, 0x7d, 0x21, 0xaa, 0x2f, + 0xcf, 0x01, 0x95, 0xc2, 0x7d, 0x21, 0xaa, 0x2f, + 0xcf, 0x01, 0x0d, 0x8c, 0x01, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x75, 0x72, 0x6e, 0x3a, + 0x58, 0x4c, 0x45, 0x55, 0x52, 0x49, 0x31, 0x31, + 0x30, 0x32, 0x32, 0x3a, 0x55, 0x41, 0x20, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0xb6, 0x10, 0x7e, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0xb6, 0x10, 0x7e, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x00, 0x00, 0x00, 0x00 ]); +exports.peer0_6 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x80, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x77, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0x8e, 0x0c, 0x80, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x10, + 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0xd3, 0x08, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff ]); +exports.peer1_24 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x42, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x7a, 0x02, 0xc9, 0xf2, 0x82, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00 ]); +exports.peer0_7 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0xbe, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x77, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0xb1, 0x15, 0x85, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x04, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x55, + 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x06, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x09, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x0a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x0b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x0c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x0e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x12, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x13, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x15, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x55, + 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff ]); +exports.peer1_25 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x09, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x7a, 0x02, 0xf3, 0xb1, 0x85, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x30, 0x33, + 0x35, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x01, 0x11, 0x00, 0x55, + 0x01, 0x06, 0x01, 0x00, 0x00, 0x00, 0x01, 0x14, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x01, 0x15, 0x02, + 0x07, 0x00, 0x00, 0x00, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x00, 0x01, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, + 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, + 0x00, 0x00, 0x35, 0x80, 0x01, 0x03, 0x00, 0x02, + 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, + 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, + 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, + 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, + 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, + 0x00, 0x00, 0x35, 0x80, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00 ]); +exports.peer0_8 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x85, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x0f, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0x46, 0x75, 0x86, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x05, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x55, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0x00, 0x00, 0x00 ]); +exports.peer1_26 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x2e, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x12, 0x02, 0xa2, 0xa9, 0x89, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, + 0x54, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x52, + 0x6f, 0x6f, 0x74, 0x02, 0x04, 0x00, 0x00, 0x00, + 0x52, 0x6f, 0x6f, 0x74, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x3d, 0x00, 0x23, 0x01, 0x01, 0x00, 0xcd, + 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x02, 0x06, 0x00, + 0x00, 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xd4, 0x07, + 0x00, 0x23, 0x01, 0x01, 0x02, 0xad, 0x27, 0x02, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x61, 0x74, + 0x61, 0x02, 0x04, 0x00, 0x00, 0x00, 0x44, 0x61, + 0x74, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3d, + 0x00, 0x23, 0x01, 0x01, 0x07, 0x01, 0x04, 0x07, + 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x73, 0x02, 0x0d, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x42, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x73, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x3d, 0x00, 0x23, 0x01, 0x01, 0x04, 0xd8, + 0x04, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x42, + 0x6f, 0x69, 0x6c, 0x65, 0x72, 0x73, 0x02, 0x07, + 0x00, 0x00, 0x00, 0x42, 0x6f, 0x69, 0x6c, 0x65, + 0x72, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3d, + 0x00, 0x28, 0x01, 0x00, 0x3d, 0x00, 0x00, 0x0a, + 0x00, 0x00, 0x00, 0x46, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x02, 0x0a, 0x00, + 0x00, 0x00, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]); +exports.peer0_9 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x85, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x0f, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0x05, 0x94, 0x8a, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x06, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0x00, 0x00, 0x00 ]); +exports.peer1_27 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0xe6, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x12, 0x02, 0x16, 0xbb, 0x8a, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x23, 0x01, 0x01, + 0x00, 0xcd, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x02, + 0x06, 0x00, 0x00, 0x00, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0xd4, 0x07, 0x00, 0x23, 0x01, 0x01, 0x02, 0xad, + 0x27, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, + 0x61, 0x74, 0x61, 0x02, 0x04, 0x00, 0x00, 0x00, + 0x44, 0x61, 0x74, 0x61, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x3d, 0x00, 0x23, 0x01, 0x01, 0x04, 0xd8, + 0x04, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x42, + 0x6f, 0x69, 0x6c, 0x65, 0x72, 0x73, 0x02, 0x07, + 0x00, 0x00, 0x00, 0x42, 0x6f, 0x69, 0x6c, 0x65, + 0x72, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3d, + 0x00, 0x23, 0x01, 0x01, 0x07, 0x01, 0x04, 0x07, + 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x73, 0x02, 0x0d, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x42, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x73, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00 ]); +exports.peer0_10 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0xe8, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x77, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0x26, 0xe2, 0x8a, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x07, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, + 0xd4, 0x07, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x01, 0x00, 0xd4, 0x07, 0x02, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x01, 0x00, 0xd4, 0x07, 0x03, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xd4, 0x07, + 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, + 0xd4, 0x07, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x01, 0x00, 0xd4, 0x07, 0x06, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x01, 0x00, 0xd4, 0x07, 0x07, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xd4, 0x07, + 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, + 0xd4, 0x07, 0x09, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x01, 0x00, 0xd4, 0x07, 0x0a, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x01, 0x00, 0xd4, 0x07, 0x0b, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xd4, 0x07, + 0x0c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, + 0xd4, 0x07, 0x0e, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x01, 0x00, 0xd4, 0x07, 0x0f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x01, 0x00, 0xd4, 0x07, 0x10, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xd4, 0x07, + 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, + 0xd4, 0x07, 0x12, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x01, 0x00, 0xd4, 0x07, 0x13, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x01, 0x00, 0xd4, 0x07, 0x14, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xd4, 0x07, + 0x15, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, + 0xd4, 0x07, 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff ]); +exports.peer1_28 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x11, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x7a, 0x02, 0x37, 0x09, 0x8b, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x30, 0x33, + 0x35, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x01, 0x11, 0x01, 0x00, + 0xd4, 0x07, 0x01, 0x06, 0x08, 0x00, 0x00, 0x00, + 0x01, 0x14, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x01, 0x15, 0x02, 0x0a, 0x00, 0x00, + 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x00, 0x01, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x02, 0x00, 0x00, 0x35, 0x80, + 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, + 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, + 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, + 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, + 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, + 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, + 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, + 0x00, 0x00, 0x35, 0x80, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00 ]); +exports.peer0_11 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x87, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x0f, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0x37, 0x09, 0x8b, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x08, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0xd4, 0x07, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00 ]); +exports.peer1_29 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x90, 0x02, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x12, 0x02, 0x47, 0x30, 0x8b, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x0b, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x01, 0x01, + 0x00, 0xd5, 0x07, 0x00, 0x00, 0x0b, 0x00, 0x00, + 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, + 0x72, 0x72, 0x61, 0x79, 0x02, 0x0b, 0x00, 0x00, + 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, + 0x72, 0x72, 0x61, 0x79, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x44, 0x00, 0x2e, 0x01, 0x01, 0x00, 0xd6, + 0x07, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x02, 0x0e, 0x00, + 0x00, 0x00, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x41, 0x72, 0x72, 0x61, 0x79, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x2f, + 0x01, 0x01, 0x00, 0xd7, 0x07, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x02, + 0x0c, 0x00, 0x00, 0x00, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5a, 0x08, + 0x00, 0x2e, 0x01, 0x01, 0x00, 0xd8, 0x07, 0x00, + 0x00, 0x0c, 0x00, 0x00, 0x00, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x44, + 0x00, 0x2e, 0x01, 0x01, 0x00, 0xb6, 0x0a, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x41, 0x75, 0x64, + 0x69, 0x74, 0x69, 0x6e, 0x67, 0x02, 0x08, 0x00, + 0x00, 0x00, 0x41, 0x75, 0x64, 0x69, 0x74, 0x69, + 0x6e, 0x67, 0x02, 0x00, 0x00, 0x00, 0x00, 0x44, + 0x00, 0x2f, 0x01, 0x01, 0x00, 0xd9, 0x07, 0x00, + 0x00, 0x12, 0x00, 0x00, 0x00, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x02, + 0x12, 0x00, 0x00, 0x00, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0xdd, 0x07, 0x00, 0x2f, + 0x01, 0x01, 0x00, 0xda, 0x07, 0x00, 0x00, 0x11, + 0x00, 0x00, 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x02, 0x11, 0x00, 0x00, + 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, + 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, + 0x63, 0x73, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0xe4, 0x07, 0x00, 0x2f, 0x01, 0x01, 0x00, 0xdb, + 0x07, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x56, + 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x02, + 0x10, 0x00, 0x00, 0x00, 0x56, 0x65, 0x6e, 0x64, + 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0xf1, 0x07, 0x00, 0x2f, 0x01, 0x01, + 0x00, 0xdc, 0x07, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, + 0x65, 0x64, 0x75, 0x6e, 0x64, 0x61, 0x6e, 0x63, + 0x79, 0x02, 0x10, 0x00, 0x00, 0x00, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x64, 0x75, + 0x6e, 0x64, 0x61, 0x6e, 0x63, 0x79, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0xf2, 0x07, 0x00, 0x2f, + 0x01, 0x01, 0x00, 0xe1, 0x2c, 0x00, 0x00, 0x11, + 0x00, 0x00, 0x00, 0x47, 0x65, 0x74, 0x4d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x02, 0x11, 0x00, 0x00, + 0x00, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x6e, 0x69, + 0x74, 0x6f, 0x72, 0x65, 0x64, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0xe1, 0x2c, 0x00, 0x2d, 0x00, 0x00, 0x3a, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x42, 0x61, 0x73, + 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x02, 0x0e, 0x00, 0x00, 0x00, + 0x42, 0x61, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]); +exports.peer0_12 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0xbe, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x77, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0x58, 0x57, 0x8b, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x09, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x3a, + 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x06, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x09, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x0a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x0b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x0c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x0e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x12, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x13, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x15, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3a, + 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff ]); +exports.peer1_30 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x17, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x7a, 0x02, 0x58, 0x57, 0x8b, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x30, 0x33, + 0x35, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x01, 0x11, 0x00, 0x3a, + 0x01, 0x06, 0x08, 0x00, 0x00, 0x00, 0x01, 0x14, + 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x42, 0x61, + 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x01, 0x15, 0x02, 0x0e, + 0x00, 0x00, 0x00, 0x42, 0x61, 0x73, 0x65, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, + 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, + 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, + 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, + 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, + 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, + 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, + 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, + 0x35, 0x80, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00 ]); +exports.peer0_13 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x85, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x0f, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0x69, 0x7e, 0x8b, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x0a, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0x00, 0x00, 0x00 ]); +exports.peer1_31 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x80, 0x07, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x12, 0x02, 0x0e, 0x05, 0x8d, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x02, 0x0b, 0x00, 0x00, 0x00, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3d, + 0x00, 0x2d, 0x01, 0x00, 0x3d, 0x00, 0x00, 0x0a, + 0x00, 0x00, 0x00, 0x46, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x02, 0x0a, 0x00, + 0x00, 0x00, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2d, 0x01, 0x00, 0x4b, 0x00, + 0x00, 0x12, 0x00, 0x00, 0x00, 0x44, 0x61, 0x74, + 0x61, 0x54, 0x79, 0x70, 0x65, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x02, + 0x12, 0x00, 0x00, 0x00, 0x44, 0x61, 0x74, 0x61, + 0x54, 0x79, 0x70, 0x65, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x01, 0x00, + 0x4c, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x44, + 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x45, + 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x54, + 0x79, 0x70, 0x65, 0x02, 0x14, 0x00, 0x00, 0x00, + 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, + 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, + 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2d, 0x01, 0x00, 0x4d, 0x00, + 0x00, 0x11, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x64, + 0x65, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x75, + 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x02, 0x11, + 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x64, 0x65, 0x6c, + 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, 0x00, 0xd4, + 0x07, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, + 0x65, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, + 0x01, 0x01, 0x00, 0xdd, 0x07, 0x00, 0x00, 0x16, + 0x00, 0x00, 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x54, 0x79, 0x70, + 0x65, 0x02, 0x16, 0x00, 0x00, 0x00, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, 0x00, 0xe4, + 0x07, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x69, 0x61, + 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x54, 0x79, 0x70, 0x65, 0x02, 0x15, 0x00, 0x00, + 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, + 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, + 0x63, 0x73, 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, + 0x00, 0xea, 0x07, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x00, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x53, 0x75, 0x6d, 0x6d, + 0x61, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x02, + 0x1e, 0x00, 0x00, 0x00, 0x53, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x44, 0x69, 0x61, 0x67, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x54, 0x79, + 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2d, 0x01, 0x01, 0x00, 0xed, 0x07, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x61, 0x67, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x02, 0x1c, 0x00, 0x00, 0x00, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x61, + 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x73, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2d, 0x01, 0x01, 0x00, 0xf1, 0x07, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x56, 0x65, 0x6e, + 0x64, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x54, 0x79, 0x70, + 0x65, 0x02, 0x14, 0x00, 0x00, 0x00, 0x56, 0x65, + 0x6e, 0x64, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x54, 0x79, + 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2d, 0x01, 0x01, 0x00, 0xf2, 0x07, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x52, 0x65, 0x64, 0x75, 0x6e, + 0x64, 0x61, 0x6e, 0x63, 0x79, 0x54, 0x79, 0x70, + 0x65, 0x02, 0x14, 0x00, 0x00, 0x00, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x64, 0x75, + 0x6e, 0x64, 0x61, 0x6e, 0x63, 0x79, 0x54, 0x79, + 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2d, 0x01, 0x01, 0x00, 0xf9, 0x07, 0x00, + 0x00, 0x0d, 0x00, 0x00, 0x00, 0x42, 0x61, 0x73, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x02, 0x0d, 0x00, 0x00, 0x00, 0x42, + 0x61, 0x73, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, 0x00, 0xfb, + 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x02, + 0x10, 0x00, 0x00, 0x00, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, 0x00, 0x03, + 0x09, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x02, 0x09, 0x00, 0x00, 0x00, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, + 0x00, 0x06, 0x09, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x02, + 0x0e, 0x00, 0x00, 0x00, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2d, 0x01, 0x01, 0x00, 0x0e, 0x09, 0x00, + 0x00, 0x1f, 0x00, 0x00, 0x00, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x44 ]); +exports.peer1_32 = new Buffer([ + 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x79, 0x70, 0x65, 0x02, 0x1f, 0x00, 0x00, + 0x00, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, + 0x63, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, + 0x01, 0x01, 0x00, 0x19, 0x09, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x69, 0x63, 0x61, 0x6c, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x02, 0x20, 0x00, 0x00, 0x00, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, + 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, + 0x01, 0x01, 0x00, 0x1a, 0x09, 0x00, 0x00, 0x1d, + 0x00, 0x00, 0x00, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x02, 0x1d, 0x00, 0x00, 0x00, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x54, 0x79, + 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2d, 0x01, 0x01, 0x00, 0x24, 0x09, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x41, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x46, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x02, 0x15, 0x00, 0x00, 0x00, 0x41, + 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, 0x00, 0xd9, + 0x22, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4c, + 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x02, + 0x08, 0x00, 0x00, 0x00, 0x4c, 0x6f, 0x63, 0x6b, + 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, 0x00, 0x9b, + 0x2b, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x42, + 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x61, 0x73, + 0x73, 0x54, 0x79, 0x70, 0x65, 0x02, 0x16, 0x00, + 0x00, 0x00, 0x42, 0x61, 0x73, 0x65, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6c, 0x61, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, + 0x01, 0x01, 0x00, 0xb3, 0x2b, 0x00, 0x00, 0x1a, + 0x00, 0x00, 0x00, 0x41, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72 ]); +exports.peer1_33 = new Buffer([ + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x02, 0x1a, 0x00, 0x00, 0x00, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, + 0x01, 0x01, 0x02, 0xa7, 0x24, 0x02, 0x00, 0x12, + 0x00, 0x00, 0x00, 0x54, 0x65, 0x73, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x02, 0x12, 0x00, + 0x00, 0x00, 0x54, 0x65, 0x73, 0x74, 0x44, 0x61, + 0x74, 0x61, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, 0x04, 0xd2, + 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x02, 0x15, 0x00, 0x00, + 0x00, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, + 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, + 0x04, 0x01, 0x02, 0x04, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x02, 0x14, 0x00, + 0x00, 0x00, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, + 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, + 0x04, 0xdf, 0x03, 0x04, 0x00, 0x11, 0x00, 0x00, + 0x00, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x53, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x02, 0x11, 0x00, 0x00, 0x00, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, + 0x6e, 0x73, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, + 0x01, 0x01, 0x04, 0xe6, 0x03, 0x04, 0x00, 0x13, + 0x00, 0x00, 0x00, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x69, 0x63, 0x41, 0x63, 0x74, 0x75, 0x61, 0x74, + 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x02, 0x13, + 0x00, 0x00, 0x00, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x69, 0x63, 0x41, 0x63, 0x74, 0x75, 0x61, 0x74, + 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, + 0x04, 0x6c, 0x04, 0x04, 0x00, 0x0a, 0x00, 0x00, + 0x00, 0x42, 0x6f, 0x69, 0x6c, 0x65, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x02, 0x0a, 0x00, 0x00, 0x00, + 0x42, 0x6f, 0x69, 0x6c, 0x65, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2d, 0x01, 0x01, 0x07, 0xe8, 0x03, 0x07, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x02, 0x10, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 ]); +exports.peer0_14 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0xbe, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x77, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0x1f, 0x2c, 0x8d, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x0b, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x3d, + 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x06, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x08, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x09, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x0a, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x0b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x0c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x0e, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x0f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x11, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x12, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x13, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x15, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3d, + 0x16, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff ]); +exports.peer1_34 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x0f, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x7a, 0x02, 0x2f, 0x53, 0x8d, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x30, 0x33, + 0x35, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x01, 0x11, 0x00, 0x3d, + 0x01, 0x06, 0x08, 0x00, 0x00, 0x00, 0x01, 0x14, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x46, 0x6f, + 0x6c, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, + 0x01, 0x15, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x46, + 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, + 0x65, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, + 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, + 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, + 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, + 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, + 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, + 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, 0x35, 0x80, + 0x02, 0x00, 0x00, 0x35, 0x80, 0x02, 0x00, 0x00, + 0x35, 0x80, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00 ]); +exports.peer0_15 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x85, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x0f, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0x51, 0xa1, 0x8d, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x0c, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0x00, 0x00, 0x00 ]); +exports.peer1_35 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0xa4, 0x01, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x12, 0x02, 0x51, 0xa1, 0x8d, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x42, + 0x61, 0x73, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x02, 0x0e, 0x00, + 0x00, 0x00, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, + 0x01, 0x01, 0x00, 0x9f, 0x2b, 0x00, 0x00, 0x16, + 0x00, 0x00, 0x00, 0x41, 0x67, 0x67, 0x72, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x54, 0x79, 0x70, + 0x65, 0x02, 0x16, 0x00, 0x00, 0x00, 0x41, 0x67, + 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x46, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, 0x02, 0x6c, + 0x27, 0x02, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x65, 0x73, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x02, 0x0e, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x54, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, + 0x01, 0x01, 0x04, 0x4d, 0x04, 0x04, 0x00, 0x13, + 0x00, 0x00, 0x00, 0x42, 0x6f, 0x69, 0x6c, 0x65, + 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x69, + 0x70, 0x65, 0x54, 0x79, 0x70, 0x65, 0x02, 0x13, + 0x00, 0x00, 0x00, 0x42, 0x6f, 0x69, 0x6c, 0x65, + 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x50, 0x69, + 0x70, 0x65, 0x54, 0x79, 0x70, 0x65, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x01, 0x01, + 0x04, 0x5c, 0x04, 0x04, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x42, 0x6f, 0x69, 0x6c, 0x65, 0x72, 0x44, + 0x72, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x02, + 0x0e, 0x00, 0x00, 0x00, 0x42, 0x6f, 0x69, 0x6c, + 0x65, 0x72, 0x44, 0x72, 0x75, 0x6d, 0x54, 0x79, + 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x2d, 0x01, 0x01, 0x04, 0x64, 0x04, 0x04, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x42, 0x6f, 0x69, + 0x6c, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x50, 0x69, 0x70, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x02, 0x14, 0x00, 0x00, 0x00, 0x42, 0x6f, + 0x69, 0x6c, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x50, 0x69, 0x70, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 ]); +exports.peer0_16 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x85, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x0f, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0xf6, 0x27, 0x8f, 0x21, 0xaa, + 0x2f, 0xcf, 0x01, 0x0d, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0x00, 0x00, 0x00 ]); +exports.peer1_36 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0xe6, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x12, 0x02, 0x07, 0x4f, 0x8f, 0x21, + 0xaa, 0x2f, 0xcf, 0x01, 0x0d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x23, 0x01, 0x01, + 0x00, 0xcd, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x02, + 0x06, 0x00, 0x00, 0x00, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0xd4, 0x07, 0x00, 0x23, 0x01, 0x01, 0x02, 0xad, + 0x27, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, + 0x61, 0x74, 0x61, 0x02, 0x04, 0x00, 0x00, 0x00, + 0x44, 0x61, 0x74, 0x61, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x3d, 0x00, 0x23, 0x01, 0x01, 0x04, 0xd8, + 0x04, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x42, + 0x6f, 0x69, 0x6c, 0x65, 0x72, 0x73, 0x02, 0x07, + 0x00, 0x00, 0x00, 0x42, 0x6f, 0x69, 0x6c, 0x65, + 0x72, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3d, + 0x00, 0x23, 0x01, 0x01, 0x07, 0x01, 0x04, 0x07, + 0x00, 0x0d, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x42, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x73, 0x02, 0x0d, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x42, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x73, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00 ]); +exports.peer0_17 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x80, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x77, 0x02, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0xae, 0x19, 0x7c, 0x24, 0xaa, + 0x2f, 0xcf, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x10, + 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, + 0xd3, 0x08, 0x0d, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff ]); +exports.peer1_37 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x42, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x7a, 0x02, 0xae, 0x19, 0x7c, 0x24, + 0xaa, 0x2f, 0xcf, 0x01, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00 ]); +exports.peer0_18 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x5f, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, + 0x01, 0x00, 0xd9, 0x01, 0x05, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x1c, 0x7e, 0x50, 0x21, 0xa0, + 0x59, 0x23, 0xf1, 0xaa, 0x03, 0x13, 0x42, 0xa8, + 0x9e, 0x0f, 0xe5, 0x95, 0x65, 0x63, 0x8f, 0x20, + 0xcc, 0x33, 0x5e, 0x88, 0x21, 0x43, 0x85, 0x13, + 0xbb, 0xe0, 0x41, 0x8a, 0x26, 0xc8, 0x25, 0xaa, + 0x2f, 0xcf, 0x01, 0x0e, 0x00, 0x00, 0x00, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 ]); +exports.peer1_38 = new Buffer([ + 0x4d, 0x53, 0x47, 0x46, 0x34, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, + 0x01, 0x00, 0xdc, 0x01, 0x18, 0xd0, 0xcb, 0x25, + 0xaa, 0x2f, 0xcf, 0x01, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 ]); +exports.peer0_19 = new Buffer([ + 0x43, 0x4c, 0x4f, 0x46, 0x39, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x01, 0x00, 0xc4, 0x01, 0x00, 0x00, 0x29, 0xf7, + 0xcb, 0x25, 0xaa, 0x2f, 0xcf, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00 ]); + + + + +var packet_analyzer = require("../lib/packet_analyzer").packet_analyzer; +var verify_multi_chunk_message= require("../test/utils/verify_message_chunk").verify_multi_chunk_message; +var session_service = require("../lib/session_service").packet_analyzer; +var session_service = require("../lib/read_service").packet_analyzer; +var session_service = require("../lib/browse_service").packet_analyzer; +//xx verify_multi_chunk_message([exports.peer0_0]); +//xx verify_multi_chunk_message([exports.peer1_0]); + + +if (false) { + +// OpenChannelRequest +verify_multi_chunk_message([exports.peer0_1]); +// OpenChannelResponse +verify_multi_chunk_message([exports.peer1_1]); + +// CreateSessionRequest +verify_multi_chunk_message([exports.peer0_2,exports.peer0_3]); +// CreateSessionResponse +} + +verify_multi_chunk_message([ + exports.peer1_2, exports.peer1_3, exports.peer1_4, exports.peer1_5, exports.peer1_6, exports.peer1_7, + exports.peer1_8, exports.peer1_9, exports.peer1_10,exports.peer1_11,exports.peer1_12,exports.peer1_13, + exports.peer1_14,exports.peer1_15,exports.peer1_16,exports.peer1_17,exports.peer1_18,exports.peer1_19, + exports.peer1_20,exports.peer1_21,exports.peer1_22,exports.peer1_23,exports.peer1_24 +]); + +process.exit(0); + +console.log("===================================================================================== A"); +// ActivateSessionRequest +verify_multi_chunk_message([exports.peer0_4]); +// ActivateSessionResponset +verify_multi_chunk_message([exports.peer1_22]); + +console.log("===================================================================================== B"); +verify_multi_chunk_message([exports.peer0_5]); +verify_multi_chunk_message([exports.peer1_23]); + +console.log("===================================================================================== C"); +verify_multi_chunk_message([exports.peer0_6]); +verify_multi_chunk_message([exports.peer1_24]); + +console.log("===================================================================================== D"); +verify_multi_chunk_message([exports.peer0_7]); +verify_multi_chunk_message([exports.peer1_25]); + +console.log("===================================================================================== E"); +verify_multi_chunk_message([exports.peer0_8]); +verify_multi_chunk_message([exports.peer1_26]); + +console.log("===================================================================================== F"); +verify_multi_chunk_message([exports.peer0_9]); +verify_multi_chunk_message([exports.peer1_27]); + + +console.log("===================================================================================== G"); +verify_multi_chunk_message([exports.peer0_10]); +verify_multi_chunk_message([exports.peer1_28]); + +console.log("===================================================================================== H"); +verify_multi_chunk_message([exports.peer0_11]); +verify_multi_chunk_message([exports.peer1_29]); + +console.log("===================================================================================== I"); +verify_multi_chunk_message([exports.peer0_12]); +verify_multi_chunk_message([exports.peer1_30]); + +console.log("===================================================================================== J"); +verify_multi_chunk_message([exports.peer0_13]); +verify_multi_chunk_message([exports.peer1_31,exports.peer1_32,exports.peer1_33]); + +console.log("===================================================================================== K"); +verify_multi_chunk_message([exports.peer0_14]); +verify_multi_chunk_message([exports.peer1_34]); + +console.log("===================================================================================== L"); +verify_multi_chunk_message([exports.peer0_15]); +verify_multi_chunk_message([exports.peer1_35]); + +console.log("===================================================================================== M"); +verify_multi_chunk_message([exports.peer0_16]); +verify_multi_chunk_message([exports.peer1_36]); + +console.log("===================================================================================== N"); +verify_multi_chunk_message([exports.peer0_17]); +verify_multi_chunk_message([exports.peer1_37]); + +console.log("===================================================================================== O"); +verify_multi_chunk_message([exports.peer0_18]); +verify_multi_chunk_message([exports.peer1_38]); + +console.log("===================================================================================== P"); +verify_multi_chunk_message([exports.peer0_19]); + diff --git a/test/fixtures/fixture_full_tcp_packets.js b/test/fixtures/fixture_full_tcp_packets.js index 5af96f88ac..21fb501f87 100644 --- a/test/fixtures/fixture_full_tcp_packets.js +++ b/test/fixtures/fixture_full_tcp_packets.js @@ -373,3 +373,28 @@ exports.packet_cs_6 = makebuffer_from_trace(function(){ */ }); +// ActivateSesionRequest +exports.packet_cs_7 = makebuffer_from_trace(function(){ +/* +0000 4d 53 47 46 8d 00 00 00 08 00 00 00 01 00 00 00 MSGF............ +0010 03 00 00 00 03 00 00 00 01 00 d3 01 05 00 00 20 ............... +0020 00 00 00 48 09 ee e7 c3 5d bb ce df d0 7a 7d c0 ...H....]....z}. +0030 6e e8 54 ba bf fa 46 7e 3f b2 06 98 6e 71 a2 87 n.T...F~?...nq.. +0040 bd 2c 5d 30 8c 81 6d 17 21 cf 01 02 00 00 00 ff .,]0..m.!....... +0050 03 00 00 ff ff ff ff 00 00 00 00 00 00 00 ff ff ................ +0060 ff ff ff ff ff ff 00 00 00 00 01 00 00 00 05 00 ................ +0070 00 00 66 72 2d 46 52 01 00 41 01 01 05 00 00 00 ..fr-FR..A...... +0080 01 00 00 00 30 ff ff ff ff ff ff ff ff ....0........ +*/}); + +// ActivateSesionResponse +exports.packet_sc_7 = makebuffer_from_trace(function(){ +/* +0000 4d 53 47 46 60 00 00 00 08 00 00 00 01 00 00 00 MSGF`........... +0010 03 00 00 00 03 00 00 00 01 00 d6 01 17 ff 83 6d ...............m +0020 17 21 cf 01 02 00 00 00 00 00 00 00 00 00 00 00 .!.............. +0030 00 00 00 00 20 00 00 00 14 19 e7 a6 e6 cf 4c e2 .... .........L. +0040 05 91 2c 1f 67 59 b1 10 ba d6 d1 46 77 89 39 9c ..,.gY.....Fw.9. +0050 20 bd 76 15 57 09 17 92 00 00 00 00 00 00 00 00 .v.W........... +*/}); + diff --git a/test/server/test_server_engine.js b/test/server/test_server_engine.js index 7081985ea9..7537a29421 100644 --- a/test/server/test_server_engine.js +++ b/test/server/test_server_engine.js @@ -115,7 +115,7 @@ describe("ServerEngine", function () { var browseResult = server.browseSingleNode("ObjectsFolder"); - browseResult.statusCode.should.equal(0); + browseResult.statusCode.should.eql( StatusCodes.Good); browseResult.references.length.should.equal(1); browseResult.references[0].isForward.should.equal(false); @@ -130,7 +130,7 @@ describe("ServerEngine", function () { var browseResult = server.browseSingleNode("RootFolder"); - browseResult.statusCode.should.equal(0); + browseResult.statusCode.should.eql( StatusCodes.Good); browseResult.references.length.should.equal(1); browseResult.references[0].isForward.should.equal(true); @@ -146,7 +146,7 @@ describe("ServerEngine", function () { var browseResult = server.browseSingleNode("ns=46;id=123456"); - browseResult.statusCode.toString(16).should.equal("80005e"); + browseResult.statusCode.should.equal(StatusCodes.Bad_NodeIdExists); browseResult.references.length.should.equal(0); @@ -182,7 +182,7 @@ describe("ServerEngine", function () { var readResult = server.readSingleNode("RootFolder",AttributeIds.BrowseName); - readResult.statusCode.should.eql(0); + readResult.statusCode.should.eql( StatusCodes.Good); readResult.value.dataType.should.eql(DataType.QualifiedName); readResult.value.value.name.should.equal("Root"); }); @@ -191,7 +191,7 @@ describe("ServerEngine", function () { var readResult = server.readSingleNode("RootFolder",AttributeIds.NodeClass); - readResult.statusCode.should.eql(0); + readResult.statusCode.should.eql( StatusCodes.Good); readResult.value.dataType.should.eql(DataType.UInt32); readResult.value.value.should.equal(NodeClass.Object.value); }); @@ -200,7 +200,7 @@ describe("ServerEngine", function () { var readResult = server.readSingleNode("RootFolder",AttributeIds.NodeId); - readResult.statusCode.should.eql(0); + readResult.statusCode.should.eql( StatusCodes.Good); readResult.value.dataType.should.eql(DataType.NodeId); readResult.value.value.toString().should.equal("ns=0;i=84"); }); @@ -209,7 +209,7 @@ describe("ServerEngine", function () { var readResult = server.readSingleNode("RootFolder",AttributeIds.DisplayName); - readResult.statusCode.should.eql(0); + readResult.statusCode.should.eql( StatusCodes.Good); readResult.value.dataType.should.eql(DataType.LocalizedText); readResult.value.value.text.toString().should.equal("Root"); }); @@ -217,7 +217,7 @@ describe("ServerEngine", function () { it("should handle a readSingleNode - Description",function() { var readResult = server.readSingleNode("RootFolder",AttributeIds.Description); - readResult.statusCode.should.eql(0); + readResult.statusCode.should.eql( StatusCodes.Good); readResult.value.dataType.should.eql(DataType.LocalizedText); readResult.value.value.text.toString().should.equal(""); }); @@ -225,7 +225,7 @@ describe("ServerEngine", function () { it("should handle a readSingleNode - WriteMask",function() { var readResult = server.readSingleNode("RootFolder",AttributeIds.WriteMask); - readResult.statusCode.should.eql(0); + readResult.statusCode.should.eql( StatusCodes.Good); readResult.value.dataType.should.eql(DataType.UInt32); readResult.value.value.should.equal(0); }); @@ -236,46 +236,55 @@ describe("ServerEngine", function () { readResult.value.dataType.should.eql(DataType.UInt32); readResult.value.value.should.equal(0); }); + it("should handle a readSingleNode - EventNotifier",function() { - it("should handle a readSingleNode - IsAbstract",function() { + var readResult = server.readSingleNode("RootFolder",AttributeIds.EventNotifier); + readResult.value.dataType.should.eql(DataType.UInt32); + readResult.value.value.should.equal(0 ); + }); + + // --- on reference Type .... + xit("should handle a readSingleNode - IsAbstract",function() { var readResult = server.readSingleNode("RootFolder",AttributeIds.IsAbstract); readResult.value.dataType.should.eql(DataType.Boolean); readResult.value.value.should.equal(false); }); - it("should handle a readSingleNode - Symmetric",function() { + xit("should handle a readSingleNode - Symmetric",function() { var readResult = server.readSingleNode("RootFolder",AttributeIds.Symmetric); readResult.value.dataType.should.eql(DataType.Boolean); readResult.value.value.should.equal(false); }); - it("should handle a readSingleNode - ContainsNoLoops",function() { - var readResult = server.readSingleNode("RootFolder",AttributeIds.ContainsNoLoops); - readResult.value.dataType.should.eql(DataType.Boolean); - readResult.value.value.should.equal(true); - }); - it("should handle a readSingleNode - EventNotifier",function() { - - var readResult = server.readSingleNode("RootFolder",AttributeIds.EventNotifier); - readResult.value.dataType.should.eql(DataType.UInt32); - readResult.value.value.should.equal(0 ); - }); - it("should handle a readSingleNode - InverseName",function() { + xit("should handle a readSingleNode - InverseName",function() { var readResult = server.readSingleNode("RootFolder",AttributeIds.InverseName); readResult.value.dataType.should.eql(DataType.String); //xx readResult.value.value.should.equal(false); }); + // for views + xit("should handle a readSingleNode - ContainsNoLoops",function() { + + var readResult = server.readSingleNode("RootFolder",AttributeIds.ContainsNoLoops); + readResult.value.dataType.should.eql(DataType.Boolean); + readResult.value.value.should.equal(true); + }); + + it("should retun Bad_AttributeIdInvalid - readSingleNode - for bad attribute ",function() { + var readResult = server.readSingleNode("RootFolder",AttributeIds.ContainsNoLoops); + readResult.statusCode.should.eql(StatusCodes.Bad_AttributeIdInvalid); + + }); + it("should retun Bad_NodeIdUnknown - readSingleNode - with unknown object",function() { - it("should retun null - readSingleNode - with unknown object",function() { var readResult = server.readSingleNode("**UNKNONW**",AttributeIds.DisplayName); - readResult.statusCode.should.equal(StatusCodes.Bad_NodeIdUnknown.value); + readResult.statusCode.should.eql(StatusCodes.Bad_NodeIdUnknown); }); it("should read ",function() { diff --git a/test/test_datavalue.js b/test/test_datavalue.js index 52ce0d123a..b422426096 100644 --- a/test/test_datavalue.js +++ b/test/test_datavalue.js @@ -1,6 +1,9 @@ var DataValue = require("../lib/datavalue").DataValue; var Variant = require("../lib/variant").Variant; var DataType = require("../lib/variant").DataType; + +var StatusCodes = require("../lib/opcua_status_code").StatusCodes; + var should = require("should"); var encode_decode_round_trip_test = require("./utils/encode_decode_round_trip_test").encode_decode_round_trip_test; @@ -42,7 +45,7 @@ describe("DataValue",function(){ var dataValue = new DataValue({ value: new Variant({dataType: DataType.String, value:"Hello"}), - statusCode: 0xBEEF, + statusCode: StatusCodes.Bad_CertificateHostNameInvalid, serverTimestamp: new Date(), serverPicoseconds: 1000, sourceTimestamp: new Date(), diff --git a/test/test_diagnostic_info.js b/test/test_diagnostic_info.js index 5b74a7e3f9..f9785114ca 100644 --- a/test/test_diagnostic_info.js +++ b/test/test_diagnostic_info.js @@ -1,12 +1,15 @@ var s = require("./../lib/structures"); var encode_decode_round_trip_test = require("./utils/encode_decode_round_trip_test").encode_decode_round_trip_test; +var StatusCodes = require("./../lib/opcua_status_code").StatusCodes; describe("DiagnosticInfo",function(){ it("should have encodingDefaultBinary = 25",function(){ + var diag = new s.DiagnosticInfo(); diag.encodingDefaultBinary.value.should.equal(25); + }); it("should encode default DiagnosticInfo in a single byte",function(){ @@ -46,7 +49,7 @@ describe("DiagnosticInfo",function(){ var diag = new s.DiagnosticInfo({ identifier: { symbolicId: 120 , locale:128 }, - innerStatusCode: 234 + innerStatusCode: StatusCodes.Bad_CertificateRevocationUnknown }); encode_decode_round_trip_test(diag,function(buffer,id){ diff --git a/test/test_factories.js b/test/test_factories.js index 146b242511..5ac546f8b6 100644 --- a/test/test_factories.js +++ b/test/test_factories.js @@ -223,6 +223,29 @@ describe("Factories: testing object factory", function () { s.value.should.equal(0); }); + it("should handle StatusCode ",function(){ + + var StatusCode = require("../lib/opcua_status_code").StatusCode; + var StatusCodes = require("../lib/opcua_status_code").StatusCodes; + var MyStruct2 = factories.registerObject( { + name: "MyStruct2", + id: factories.next_available_id(), + fields: [ + { name: "value", fieldType: "MyInteger" }, + { name: "statusCode", fieldType: "StatusCode" } + ] + }); + + var s = new MyStruct2(); + s.should.have.property("value"); + s.should.have.property("statusCode"); + s.value.should.equal(0); + s.statusCode.value.should.equal(0); + s.statusCode.should.eql(StatusCodes.Good); + // should.eql(StatusCode.Good); + + + }); it('should handle enumeration properly',function(){ diff --git a/test/test_opcua_factories.js b/test/test_opcua_factories.js index b896302897..61e9d30f59 100644 --- a/test/test_opcua_factories.js +++ b/test/test_opcua_factories.js @@ -257,6 +257,16 @@ describe("checking decoding real messageChunks captured with WireShark ", functi }, done); }); + it("should decode a real ActivateSessionRequest message",function(done){ + redirectToFile("ws_ActivateSessionRequest.log", function () { + verify_multi_chunk_message([packets.packet_cs_7]); + }, done); + }); + it("should decode a real ActivateSessionResponse message",function(done){ + redirectToFile("ws_ActivateSessionResponse.log", function () { + verify_multi_chunk_message([packets.packet_sc_7]); + }, done); + }); it("should decode a real CreateSessionResponse message sent in two chunks", function (done) { diff --git a/test/test_status_code.js b/test/test_status_code.js new file mode 100644 index 0000000000..e5aa980cb0 --- /dev/null +++ b/test/test_status_code.js @@ -0,0 +1,43 @@ +var assert = require('better-assert'); +var StatusCodes = require("../lib/opcua_status_code").StatusCodes; +var StatusCode = require("../lib/opcua_status_code").StatusCode; +var encodeStatusCode = require("../lib/opcua_status_code").encodeStatusCode; +var decodeStatusCode = require("../lib/opcua_status_code").decodeStatusCode; +var should = require("should"); +var BinaryStream = require("../lib/binaryStream").BinaryStream; + +describe("testing status code manipulation",function(){ + + it("should create Bad_NodeIdExists",function(){ + + StatusCodes.Bad_NodeIdExists.value.should.equal(94); + StatusCodes.Bad_NodeIdExists.name.should.equal("Bad_NodeIdExists"); + StatusCodes.Bad_NodeIdExists.highword.should.equal(0x805E); + + }); + + it("should create Bad_AttributeIdInvalid",function(){ + StatusCodes.Bad_AttributeIdInvalid.value.should.equal(53); + StatusCodes.Bad_AttributeIdInvalid.name.should.equal("Bad_AttributeIdInvalid"); + StatusCodes.Bad_AttributeIdInvalid.highword.should.equal(0x8035); + + }); + + it("should encode and decode a status code",function(){ + + var stream = new BinaryStream(8); + var statusCode = StatusCodes.Bad_NodeIdExists; + encodeStatusCode(statusCode,stream); + + stream.rewind(); + var statusCode2 = decodeStatusCode(stream); + + statusCode2.should.eql(statusCode); + + }); + it("statusCode should implement a special toString",function(){ + + StatusCodes.Bad_AttributeIdInvalid.should.be.instanceOf(StatusCode); + StatusCodes.Bad_AttributeIdInvalid.toString().should.equal("Bad_AttributeIdInvalid (0x80350000)"); + }); +}); \ No newline at end of file diff --git a/test/transport/test_client_tcp_transport.js b/test/transport/test_client_tcp_transport.js index 57f20178b2..1c1bb85600 100644 --- a/test/transport/test_client_tcp_transport.js +++ b/test/transport/test_client_tcp_transport.js @@ -5,7 +5,7 @@ var assert = require('better-assert'); var utils = require("../../lib/utils"); var color = require("colors"); var s = require("../../lib/structures"); - +var StatusCode = require("../../lib/opcua_status_code").StatusCode; var debugLog = require("../../lib/utils").make_debugLog(__filename); @@ -109,6 +109,7 @@ describe("testing ClientTCP_transport",function(){ }); function makeError(statusCode){ + assert(statusCode instanceof StatusCode); return new s.TCPErrorMessage({ name: statusCode.value, reason: statusCode.description}); } diff --git a/test/utils/verify_message_chunk.js b/test/utils/verify_message_chunk.js index 2c61a3f0cf..fbe40893f8 100644 --- a/test/utils/verify_message_chunk.js +++ b/test/utils/verify_message_chunk.js @@ -1,23 +1,36 @@ var MessageBuilder = require("../../lib/message_builder").MessageBuilder; var packet_analyzer = require("../../lib/packet_analyzer").packet_analyzer; var messageHeaderToString = require("../../lib/packet_analyzer").messageHeaderToString; - -function verify_multi_chunk_message(messageChunks) { +var sprintf = require("sprintf"); +/** + * + * @param packets + */ +function verify_multi_chunk_message(packets) { var messageBuild = new MessageBuilder(); messageBuild.on("full_message_body", function (full_message_body) { - + console.log("full_message_body received:") packet_analyzer(full_message_body); }); + messageBuild.on("start_chunk", function (info,data) { + console.log(" starting new chunk ",info.messageHeader); + }); - messageChunks.forEach(function (messageChunk) { + messageBuild.on("chunk", function (messageChunk) { console.log(messageHeaderToString(messageChunk)); - messageBuild.feed(messageChunk); + }); + + var l = 0; + packets.forEach(function (packet) { + l+=packet.length; + console.log(sprintf(" adding packet size : %5d l=%d", packet.length,l)); + messageBuild.feed(packet); }); } -function verify_single_chunk_message(messageChunk) { - verify_multi_chunk_message([messageChunk]); +function verify_single_chunk_message(packet) { + verify_multi_chunk_message([packet]); } exports.verify_multi_chunk_message = verify_multi_chunk_message;