Home | History | Annotate | Download | only in internal
      1 !<arch>
      2 __.PKGDEF       0           0     0     644     4412      `
      3 go object linux amd64 go1.5.1 X:none
      4 build id "bf6b27d75e1b02ae61a3e185853d1e276913673a"
      5 
      6 $$
      7 package svg
      8 	import runtime "runtime"
      9 	import bytes "bytes"
     10 	import regexp "regexp"
     11 	import strings "strings"
     12 	type @"bytes".readOp int
     13 	import io "io" // indirect
     14 	type @"io".Reader interface { Read(@"io".p []byte) (@"io".n int, @"io".err error) }
     15 	type @"io".Writer interface { Write(@"io".p []byte) (@"io".n int, @"io".err error) }
     16 	type @"bytes".Buffer struct { @"bytes".buf []byte; @"bytes".off int; @"bytes".runeBytes [4]byte; @"bytes".bootstrap [64]byte; @"bytes".lastRead @"bytes".readOp }
     17 	func (@"bytes".b2 *@"bytes".Buffer "esc:0x22") Bytes () (? []byte) { return @"bytes".b2.@"bytes".buf[@"bytes".b2.@"bytes".off:] }
     18 	func (@"bytes".b2 *@"bytes".Buffer "esc:0x1") Cap () (? int) { return cap(@"bytes".b2.@"bytes".buf) }
     19 	func (@"bytes".b1 *@"bytes".Buffer) Grow (@"bytes".n2 int)
     20 	func (@"bytes".b2 *@"bytes".Buffer "esc:0x1") Len () (? int) { return len(@"bytes".b2.@"bytes".buf) - @"bytes".b2.@"bytes".off }
     21 	func (@"bytes".b2 *@"bytes".Buffer "esc:0x22") Next (@"bytes".n3 int) (? []byte) { @"bytes".b2.@"bytes".lastRead = @"bytes".readOp(0x0); var @"bytes".m4 int; ; @"bytes".m4 = @"bytes".b2.Len(); if @"bytes".n3 > @"bytes".m4 { @"bytes".n3 = @"bytes".m4 }; var @"bytes".data5 []byte; ; @"bytes".data5 = @"bytes".b2.@"bytes".buf[@"bytes".b2.@"bytes".off:@"bytes".b2.@"bytes".off + @"bytes".n3]; @"bytes".b2.@"bytes".off += @"bytes".n3; if @"bytes".n3 > 0x0 { @"bytes".b2.@"bytes".lastRead = @"bytes".readOp(0x2) }; return @"bytes".data5 }
     22 	func (@"bytes".b3 *@"bytes".Buffer "esc:0x9") Read (@"bytes".p4 []byte "esc:0x1") (@"bytes".n1 int, @"bytes".err2 error)
     23 	func (@"bytes".b3 *@"bytes".Buffer "esc:0x1") ReadByte () (@"bytes".c1 byte, @"bytes".err2 error)
     24 	func (@"bytes".b3 *@"bytes".Buffer "esc:0x9") ReadBytes (@"bytes".delim4 byte) (@"bytes".line1 []byte, @"bytes".err2 error)
     25 	func (@"bytes".b3 *@"bytes".Buffer "esc:0x9") ReadFrom (@"bytes".r4 @"io".Reader) (@"bytes".n1 int64, @"bytes".err2 error)
     26 	func (@"bytes".b4 *@"bytes".Buffer "esc:0x1") ReadRune () (@"bytes".r1 rune, @"bytes".size2 int, @"bytes".err3 error)
     27 	func (@"bytes".b3 *@"bytes".Buffer "esc:0x1") ReadString (@"bytes".delim4 byte) (@"bytes".line1 string, @"bytes".err2 error)
     28 	func (@"bytes".b1 *@"bytes".Buffer "esc:0x1") Reset ()
     29 	func (@"bytes".b2 *@"bytes".Buffer "esc:0x1") String () (? string) { if @"bytes".b2 == nil { return "<nil>" }; return string(@"bytes".b2.@"bytes".buf[@"bytes".b2.@"bytes".off:]) }
     30 	func (@"bytes".b1 *@"bytes".Buffer "esc:0x1") Truncate (@"bytes".n2 int)
     31 	func (@"bytes".b2 *@"bytes".Buffer "esc:0x1") UnreadByte () (? error) { if @"bytes".b2.@"bytes".lastRead != @"bytes".readOp(0x1) && @"bytes".b2.@"bytes".lastRead != @"bytes".readOp(0x2) { return @"errors".New("bytes.Buffer: UnreadByte: previous operation was not a read") }; @"bytes".b2.@"bytes".lastRead = @"bytes".readOp(0x0); if @"bytes".b2.@"bytes".off > 0x0 { @"bytes".b2.@"bytes".off-- }; return nil }
     32 	func (@"bytes".b2 *@"bytes".Buffer "esc:0x1") UnreadRune () (? error)
     33 	func (@"bytes".b3 *@"bytes".Buffer) Write (@"bytes".p4 []byte "esc:0x9") (@"bytes".n1 int, @"bytes".err2 error)
     34 	func (@"bytes".b2 *@"bytes".Buffer) WriteByte (@"bytes".c3 byte) (? error)
     35 	func (@"bytes".b3 *@"bytes".Buffer) WriteRune (@"bytes".r4 rune) (@"bytes".n1 int, @"bytes".err2 error)
     36 	func (@"bytes".b3 *@"bytes".Buffer) WriteString (@"bytes".s4 string "esc:0x9") (@"bytes".n1 int, @"bytes".err2 error)
     37 	func (@"bytes".b3 *@"bytes".Buffer "esc:0x9") WriteTo (@"bytes".w4 @"io".Writer) (@"bytes".n1 int64, @"bytes".err2 error)
     38 	func (@"bytes".b2 *@"bytes".Buffer) @"bytes".grow (@"bytes".n3 int) (? int)
     39 	func (@"bytes".b3 *@"bytes".Buffer "esc:0x22") @"bytes".readSlice (@"bytes".delim4 byte) (@"bytes".line1 []byte, @"bytes".err2 error)
     40 	func @"".Massage (@"".in2 @"bytes".Buffer "esc:0x1") (? string)
     41 	func @"".init ()
     42 	import errors "errors" // indirect
     43 	func @"errors".New (@"errors".text2 string) (? error) { return (&@"errors".errorString{ @"errors".s:@"errors".text2 }) }
     44 	type @"errors".errorString struct { @"errors".s string }
     45 	func (@"errors".e2 *@"errors".errorString "esc:0x22") Error () (? string) { return @"errors".e2.@"errors".s }
     46 
     47 $$
     48 _go_.o          0           0     0     644     15347     `
     49 go object linux amd64 go1.5.1 X:none
     50 
     51 !
     52 go13ldbytes.aregexp.astrings.a"".MassagedH%HD$H;A9H1H$PH$XH$1HhL@LHL9LI)I)ItM*H$LT$xLT$L$LD$L$LL$HL$ HD$(HL$HH$HD$PHD$HH\$HD$HH\$ HD$(HD$0HL$8HD$@HH$HL$HHL$HD$PHD$Ht$HHT$PHD$HL$ H$H\$(H$H$HHHH9IHHHHHHH9H)IHtMH$H|$hH|$LL$pLL$HH\$HD$ LD$XLD$(Hl$`Hl$0Ht$8HT$@HH$Ht$HHt$HT$PHT$Ht$HHT$PHD$HL$ H$H\$(H$H$HHHH9IHHHHH9H)IHtMH$H|$hH|$LL$pLL$HH\$HD$ LD$XLD$(Hl$`Hl$0Ht$8HT$@HH$Ht$HHt$HT$PHT$HT$HHL$PHD$Ht$ H\$(H$HHHH9IHH$HH$HHH9w|H)IHtMH$H|$hH|$LL$pLL$HH\$HD$ LD$XLD$(Hl$`Hl$0HT$8HL$@H$PH$XH>
     68 
     69 2runtime.slicebytetostringgo.string."&;"$go.string."&amp;;"
     70 strings.Replace"".viewBox
     71 @regexp.(*Regexp).FindStringIndex^go.string."<svg width=\"100%\" height=\"100%\""
     72 *runtime.concatstring3"".graphId
     73 @regexp.(*Regexp).FindStringIndex
     74 ""..gostring.1
     76 *runtime.concatstring3"".svgClose
     79 @regexp.(*Regexp).FindStringIndex go.string."</g>"
     80 *runtime.concatstring3
     81 $runtime.panicslice
     82 $runtime.panicindex
     83 $runtime.panicslice
     84 $runtime.panicindex
     85 $runtime.panicslice
     86 $runtime.panicindex
     87 $runtime.panicslice
     88 $runtime.panicindex
     89 $runtime.panicslice
     90 $runtime.panicindex
     91 $runtime.panicslice
     92 $runtime.panicindex
     93 $runtime.panicslice
     94 0runtime.morestack_noctxt$"".autotmp_0013type.string"".autotmp_0012type.int"".autotmp_0011type.string"".autotmp_0010type.int"".autotmp_0009type.string"".autotmp_0008type.int"".autotmp_0007type.string"".autotmp_0006type.int"".autotmp_0005type.string"".autotmp_0003type.string"".autotmp_0002type.int"".~r0type.[]uint8"".loc/type.[]int"".loctype.[]int"".loc_type.[]int"".svgtype.string"".~r1type.string
    101 "".in"type.bytes.BufferjZ01mU.__}O7...Tgclocals7a323ca1c15880f1d654eb691e6746a0Tgclocals5ba12c3ef7a52494f3303a6bf7fd24c7pprebuilts/go/linux-x86/src/cmd/pprof/internal/svg/svg.go"".initdH%H;a HtuHHH$HD$7H\$=HHH$HD$H\$=uXHHH$HD$H\$=uHHH-H,$H\$H-H,$H\$H-H,$H\$P8
    104 4"".initdoneL"".initdonej
    105 "runtime.throwinitz"".initdone
    106 bytes.init
    107 regexp.init
    108 strings.initgo.string."<svg\\s*width=\"[^\"]+\"\\s*height=\"[^\"]+\"\\s*viewBox=\"[^\"]+\""
    109 $regexp.MustCompile6runtime.writeBarrierEnabled"".viewBox<go.string."<g id=\"graph\\d\""
    110 $regexp.MustCompile6runtime.writeBarrierEnabled"".graphId$go.string."</svg>"
    111 $regexp.MustCompile6runtime.writeBarrierEnabled"".svgClose"".initdone"".svgClose
    112 .runtime.writebarrierptr"".graphId
    113 .runtime.writebarrierptr"".viewBox
    114 .runtime.writebarrierptr
    115 0runtime.morestack_noctxt00/0/0U Q1
2vQU2..RQRST
4Tgclocals33cdeccccebe80329f1fdbee7f5874cbTgclocals33cdeccccebe80329f1fdbee7f5874cbvprebuilts/go/linux-x86/src/cmd/pprof/internal/svg/svgpan.gopprebuilts/go/linux-x86/src/cmd/pprof/internal/svg/svg.go$go.string.hdr."&;"  go.string."&;"go.string."&;"&;,go.string.hdr."&amp;;"  $go.string."&amp;;"$go.string."&amp;;"&amp;;fgo.string.hdr."<svg width=\"100%\" height=\"100%\""  ^go.string."<svg width=\"100%\" height=\"100%\""^go.string."<svg width=\"100%\" height=\"100%\""@@<svg width="100%" height="100%"$"".hdr..gostring.1  ""..gostring.1""..gostring.1ww<script type="text/ecmascript"><![CDATA[
    121 /** 
    122  *  SVGPan library 1.2.1
    123  * ======================
    124  *
    125  * Given an unique existing element with id "viewport" (or when missing, the first g 
    126  * element), including the the library into any SVG adds the following capabilities:
    127  *
    128  *  - Mouse panning
    129  *  - Mouse zooming (using the wheel)
    130  *  - Object dragging
    131  *
    132  * You can configure the behaviour of the pan/zoom/drag with the variables
    133  * listed in the CONFIGURATION section of this file.
    134  *
    135  * Known issues:
    136  *
    137  *  - Zooming (while panning) on Safari has still some issues
    138  *
    139  * Releases:
    140  *
    141  * 1.2.1, Mon Jul  4 00:33:18 CEST 2011, Andrea Leofreddi
    142  *	- Fixed a regression with mouse wheel (now working on Firefox 5)
    143  *	- Working with viewBox attribute (#4)
    144  *	- Added "use strict;" and fixed resulting warnings (#5)
    145  *	- Added configuration variables, dragging is disabled by default (#3)
    146  *
    147  * 1.2, Sat Mar 20 08:42:50 GMT 2010, Zeng Xiaohui
    148  *	Fixed a bug with browser mouse handler interaction
    149  *
    150  * 1.1, Wed Feb  3 17:39:33 GMT 2010, Zeng Xiaohui
    151  *	Updated the zoom code to support the mouse wheel on Safari/Chrome
    152  *
    153  * 1.0, Andrea Leofreddi
    154  *	First release
    155  *
    156  * This code is licensed under the following BSD license:
    157  *
    158  * Copyright 2009-2010 Andrea Leofreddi <a.leofreddi (a] itcharm.com>. All rights reserved.
    159  * 
    160  * Redistribution and use in source and binary forms, with or without modification, are
    161  * permitted provided that the following conditions are met:
    162  * 
    163  *    1. Redistributions of source code must retain the above copyright notice, this list of
    164  *       conditions and the following disclaimer.
    165  * 
    166  *    2. Redistributions in binary form must reproduce the above copyright notice, this list
    167  *       of conditions and the following disclaimer in the documentation and/or other materials
    168  *       provided with the distribution.
    169  * 
    170  * THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED
    171  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
    172  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR
    173  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    174  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    175  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    176  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    177  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    178  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    179  * 
    180  * The views and conclusions contained in the software and documentation are those of the
    181  * authors and should not be interpreted as representing official policies, either expressed
    182  * or implied, of Andrea Leofreddi.
    183  */
    184 
    185 "use strict";
    186 
    187 /// CONFIGURATION 
    188 /// ====>
    189 
    190 var enablePan = 1; // 1 or 0: enable or disable panning (default enabled)
    191 var enableZoom = 1; // 1 or 0: enable or disable zooming (default enabled)
    192 var enableDrag = 0; // 1 or 0: enable or disable dragging (default disabled)
    193 
    194 /// <====
    195 /// END OF CONFIGURATION 
    196 
    197 var root = document.documentElement;
    198 
    199 var state = 'none', svgRoot, stateTarget, stateOrigin, stateTf;
    200 
    201 setupHandlers(root);
    202 
    203 /**
    204  * Register handlers
    205  */
    206 function setupHandlers(root){
    207 	setAttributes(root, {
    208 		"onmouseup" : "handleMouseUp(evt)",
    209 		"onmousedown" : "handleMouseDown(evt)",
    210 		"onmousemove" : "handleMouseMove(evt)",
    211 		//"onmouseout" : "handleMouseUp(evt)", // Decomment this to stop the pan functionality when dragging out of the SVG element
    212 	});
    213 
    214 	if(navigator.userAgent.toLowerCase().indexOf('webkit') >= 0)
    215 		window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari
    216 	else
    217 		window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others
    218 }
    219 
    220 /**
    221  * Retrieves the root element for SVG manipulation. The element is then cached into the svgRoot global variable.
    222  */
    223 function getRoot(root) {
    224 	if(typeof(svgRoot) == "undefined") {
    225 		var g = null;
    226 
    227 		g = root.getElementById("viewport");
    228 
    229 		if(g == null)
    230 			g = root.getElementsByTagName('g')[0];
    231 
    232 		if(g == null)
    233 			alert('Unable to obtain SVG root element');
    234 
    235 		setCTM(g, g.getCTM());
    236 
    237 		g.removeAttribute("viewBox");
    238 
    239 		svgRoot = g;
    240 	}
    241 
    242 	return svgRoot;
    243 }
    244 
    245 /**
    246  * Instance an SVGPoint object with given event coordinates.
    247  */
    248 function getEventPoint(evt) {
    249 	var p = root.createSVGPoint();
    250 
    251 	p.x = evt.clientX;
    252 	p.y = evt.clientY;
    253 
    254 	return p;
    255 }
    256 
    257 /**
    258  * Sets the current transform matrix of an element.
    259  */
    260 function setCTM(element, matrix) {
    261 	var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")";
    262 
    263 	element.setAttribute("transform", s);
    264 }
    265 
    266 /**
    267  * Dumps a matrix to a string (useful for debug).
    268  */
    269 function dumpMatrix(matrix) {
    270 	var s = "[ " + matrix.a + ", " + matrix.c + ", " + matrix.e + "\n  " + matrix.b + ", " + matrix.d + ", " + matrix.f + "\n  0, 0, 1 ]";
    271 
    272 	return s;
    273 }
    274 
    275 /**
    276  * Sets attributes of an element.
    277  */
    278 function setAttributes(element, attributes){
    279 	for (var i in attributes)
    280 		element.setAttributeNS(null, i, attributes[i]);
    281 }
    282 
    283 /**
    284  * Handle mouse wheel event.
    285  */
    286 function handleMouseWheel(evt) {
    287 	if(!enableZoom)
    288 		return;
    289 
    290 	if(evt.preventDefault)
    291 		evt.preventDefault();
    292 
    293 	evt.returnValue = false;
    294 
    295 	var svgDoc = evt.target.ownerDocument;
    296 
    297 	var delta;
    298 
    299 	if(evt.wheelDelta)
    300 		delta = evt.wheelDelta / 3600; // Chrome/Safari
    301 	else
    302 		delta = evt.detail / -90; // Mozilla
    303 
    304 	var z = 1 + delta; // Zoom factor: 0.9/1.1
    305 
    306 	var g = getRoot(svgDoc);
    307 	
    308 	var p = getEventPoint(evt);
    309 
    310 	p = p.matrixTransform(g.getCTM().inverse());
    311 
    312 	// Compute new scale matrix in current mouse position
    313 	var k = root.createSVGMatrix().translate(p.x, p.y).scale(z).translate(-p.x, -p.y);
    314 
    315         setCTM(g, g.getCTM().multiply(k));
    316 
    317 	if(typeof(stateTf) == "undefined")
    318 		stateTf = g.getCTM().inverse();
    319 
    320 	stateTf = stateTf.multiply(k.inverse());
    321 }
    322 
    323 /**
    324  * Handle mouse move event.
    325  */
    326 function handleMouseMove(evt) {
    327 	if(evt.preventDefault)
    328 		evt.preventDefault();
    329 
    330 	evt.returnValue = false;
    331 
    332 	var svgDoc = evt.target.ownerDocument;
    333 
    334 	var g = getRoot(svgDoc);
    335 
    336 	if(state == 'pan' && enablePan) {
    337 		// Pan mode
    338 		var p = getEventPoint(evt).matrixTransform(stateTf);
    339 
    340 		setCTM(g, stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y));
    341 	} else if(state == 'drag' && enableDrag) {
    342 		// Drag mode
    343 		var p = getEventPoint(evt).matrixTransform(g.getCTM().inverse());
    344 
    345 		setCTM(stateTarget, root.createSVGMatrix().translate(p.x - stateOrigin.x, p.y - stateOrigin.y).multiply(g.getCTM().inverse()).multiply(stateTarget.getCTM()));
    346 
    347 		stateOrigin = p;
    348 	}
    349 }
    350 
    351 /**
    352  * Handle click event.
    353  */
    354 function handleMouseDown(evt) {
    355 	if(evt.preventDefault)
    356 		evt.preventDefault();
    357 
    358 	evt.returnValue = false;
    359 
    360 	var svgDoc = evt.target.ownerDocument;
    361 
    362 	var g = getRoot(svgDoc);
    363 
    364 	if(
    365 		evt.target.tagName == "svg" 
    366 		|| !enableDrag // Pan anyway when drag is disabled and the user clicked on an element 
    367 	) {
    368 		// Pan mode
    369 		state = 'pan';
    370 
    371 		stateTf = g.getCTM().inverse();
    372 
    373 		stateOrigin = getEventPoint(evt).matrixTransform(stateTf);
    374 	} else {
    375 		// Drag mode
    376 		state = 'drag';
    377 
    378 		stateTarget = evt.target;
    379 
    380 		stateTf = g.getCTM().inverse();
    381 
    382 		stateOrigin = getEventPoint(evt).matrixTransform(stateTf);
    383 	}
    384 }
    385 
    386 /**
    387  * Handle mouse button release event.
    388  */
    389 function handleMouseUp(evt) {
    390 	if(evt.preventDefault)
    391 		evt.preventDefault();
    392 
    393 	evt.returnValue = false;
    394 
    395 	var svgDoc = evt.target.ownerDocument;
    396 
    397 	if(state == 'pan' || state == 'drag') {
    398 		// Quit pan mode
    399 		state = '';
    400 	}
    401 }
    402 
    403 ]]></script><g id="viewport" transform="scale(0.5,0.5) translate(0,0)">(go.string.hdr."</g>"   go.string."</g>" go.string."</g>"
    404 </g>Tgclocals5ba12c3ef7a52494f3303a6bf7fd24c7  Tgclocals7a323ca1c15880f1d654eb691e6746a0  go.string.hdr."<svg\\s*width=\"[^\"]+\"\\s*height=\"[^\"]+\"\\s*viewBox=\"[^\"]+\""  7go.string."<svg\\s*width=\"[^\"]+\"\\s*height=\"[^\"]+\"\\s*viewBox=\"[^\"]+\""go.string."<svg\\s*width=\"[^\"]+\"\\s*height=\"[^\"]+\"\\s*viewBox=\"[^\"]+\""pp<svg\s*width="[^"]+"\s*height="[^"]+"\s*viewBox="[^"]+"Dgo.string.hdr."<g id=\"graph\\d\""  <go.string."<g id=\"graph\\d\""<go.string."<g id=\"graph\\d\""  <g id="graph\d",go.string.hdr."</svg>"  $go.string."</svg>"$go.string."</svg>"</svg>Tgclocals33cdeccccebe80329f1fdbee7f5874cbTgclocals33cdeccccebe80329f1fdbee7f5874cb."".viewBox&type.*regexp.Regexp."".graphId&type.*regexp.Regexp."".svgClose&type.*regexp.Regexp0"".initdonetype.uint8"".Massagef"".Massage"".initf"".init"runtime.gcbits.01*go.string.hdr."[]int"  "go.string."[]int""go.string."[]int"[]inttype.[]intf0 runtime.algarray@"runtime.gcbits.01P*go.string.hdr."[]int"p&go.weak.type.*[]int"runtime.zerovaluetype.int.go.typelink.[]int	[]inttype.[]int.go.string.hdr."[]uint8"  &go.string."[]uint8"&go.string."[]uint8"[]uint8type.[]uint8~.80 runtime.algarray@"runtime.gcbits.01P.go.string.hdr."[]uint8"p*go.weak.type.*[]uint8"runtime.zerovaluetype.uint86go.typelink.[]uint8	[]uint8type.[]uint8.go.string.hdr."runtime"  &go.string."runtime"&go.string."runtime"runtime,go.importpath.runtime.  &go.string."runtime"*go.string.hdr."bytes"  "go.string."bytes""go.string."bytes"bytes(go.importpath.bytes.  "go.string."bytes",go.string.hdr."regexp"  $go.string."regexp"$go.string."regexp"regexp*go.importpath.regexp.  $go.string."regexp".go.string.hdr."strings"  &go.string."strings"&go.string."strings"strings,go.importpath.strings.  &go.string."strings""runtime.zerovaluego13ld