From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk0-f169.google.com (mail-qk0-f169.google.com [209.85.220.169]) by mail.openembedded.org (Postfix) with ESMTP id 0B9856013D for ; Mon, 11 May 2015 10:55:22 +0000 (UTC) Received: by qku63 with SMTP id 63so83615635qku.3 for ; Mon, 11 May 2015 03:55:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; bh=cDyToObP+9q021BPGttpccY6JUg69dJ+uet2qvHmvfw=; b=J5skZW4p8BopGUnON/T4HPuBad/oig9o/hfpT4NgpxwZTpPiz9SMLWfqhvQVApKRV6 jBt2SvfGNH1crnzFrt+2yFqz4Ls+gOyE5VBuWo8PkLStiIVxFdMorz17yFK7zhGTOmtf dwEuw/fBR6u/bUFNU1iCujrwjhocbryiItTNtN6tywLqeRsg7PghI4FsOvmAoLQsNACe Y4Y6zocw8yaH9VbAQpHQoHf1U+bM3SqP0Os+iD+t3Wi/jUs04OkIuFQFyOQpWniQKwTA jkGZerx21BA7I+0s5DqvJPDUwIQz0B/wwuLpU3eWPXgBwVvzuZQFPEZ5OEkRKRIqzHKz 0mGQ== X-Gm-Message-State: ALoCoQnheup2R7w2qKBTgrkmGCg/ZvEQef+j3/Kh8Csd/ejMkZc2PXp2aVxXfiieYRoNIJRbub1/ X-Received: by 10.140.216.5 with SMTP id m5mr13152674qhb.52.1431341723534; Mon, 11 May 2015 03:55:23 -0700 (PDT) MIME-Version: 1.0 Received: by 10.140.102.231 with HTTP; Mon, 11 May 2015 03:55:03 -0700 (PDT) In-Reply-To: <1431124779-28516-1-git-send-email-juro.bystricky@intel.com> References: <1431124779-28516-1-git-send-email-juro.bystricky@intel.com> From: "Burton, Ross" Date: Mon, 11 May 2015 11:55:03 +0100 Message-ID: To: Juro Bystricky Cc: OE-core Subject: Re: [PATCH] Add support for VirtualBox VDI images X-BeenThere: openembedded-core@lists.openembedded.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Patches and discussions about the oe-core layer List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 May 2015 10:55:25 -0000 Content-Type: multipart/alternative; boundary=001a11354e68fbdd960515cc36d9 --001a11354e68fbdd960515cc36d9 Content-Type: text/plain; charset=UTF-8 Thanks Juro, On 8 May 2015 at 23:39, Juro Bystricky wrote: > Yocto does not support VirtualBox sparse image VDI file format. > This could be achieved by the attached patch. The support mimics > the VMDK support for VMware. The only subtle difference is that > qemu-native has be be built with uuid enabled, as VDI images > need a valid UUID in order to be recognized by VirtualBox. > > [YOCTO #7374] > This needs to be split up into logical patches. For example one to enable UUID into Qemu, one to add the new image type, another to update the checks. Ross --001a11354e68fbdd960515cc36d9 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Thanks Juro,

On 8 May 2015 at 23:39, Juro B= ystricky <juro.bystricky@intel.com> wrote:
Yocto does not support VirtualBox sparse image VDI file format.
This could be achieved by the attached patch. The support mimics
the VMDK support for VMware. The only subtle difference is that
qemu-native has be be built with uuid enabled, as VDI images
need a valid UUID in order to be recognized by VirtualBox.

[YOCTO #7374]

This needs to be split up into lo= gical patches.=C2=A0 For example one to enable UUID into Qemu, one to add t= he new image type, another to update the checks.

Ross
--001a11354e68fbdd960515cc36d9-- From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mail.openembedded.org (Postfix) with ESMTP id 9148E6013D for ; Mon, 11 May 2015 14:40:41 +0000 (UTC) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP; 11 May 2015 07:40:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,407,1427785200"; d="scan'208";a="569518097" Received: from skothar1-mobl6.amr.corp.intel.com (HELO swold-mobl.amr.corp.intel.com) ([10.254.52.41]) by orsmga003.jf.intel.com with ESMTP; 11 May 2015 07:40:42 -0700 Message-ID: <5550BF6A.3050900@linux.intel.com> Date: Mon, 11 May 2015 07:40:42 -0700 From: Saul Wold User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Juro Bystricky , openembedded-core@lists.openembedded.org References: <1431124779-28516-1-git-send-email-juro.bystricky@intel.com> In-Reply-To: <1431124779-28516-1-git-send-email-juro.bystricky@intel.com> Subject: Re: [PATCH] Add support for VirtualBox VDI images X-BeenThere: openembedded-core@lists.openembedded.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Patches and discussions about the oe-core layer List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 May 2015 14:40:45 -0000 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit On 05/08/2015 03:39 PM, Juro Bystricky wrote: > Yocto does not support VirtualBox sparse image VDI file format. > This could be achieved by the attached patch. The support mimics > the VMDK support for VMware. The only subtle difference is that > qemu-native has be be built with uuid enabled, as VDI images > need a valid UUID in order to be recognized by VirtualBox. > > [YOCTO #7374] > > Signed-off-by: Juro Bystricky > --- > meta/classes/boot-directdisk.bbclass | 3 ++- > meta/classes/image-vdi.bbclass | 30 ++++++++++++++++++++++++++++++ > meta/classes/image.bbclass | 5 ++++- > meta/classes/image_types.bbclass | 5 +++-- > meta/classes/sanity.bbclass | 4 ++++ > meta/conf/documentation.conf | 1 + > meta/lib/oe/image.py | 4 ++-- > meta/recipes-devtools/qemu/qemu.inc | 2 +- > 8 files changed, 47 insertions(+), 7 deletions(-) > create mode 100644 meta/classes/image-vdi.bbclass > > diff --git a/meta/classes/boot-directdisk.bbclass b/meta/classes/boot-directdisk.bbclass > index 44f738b..d2727c4 100644 > --- a/meta/classes/boot-directdisk.bbclass > +++ b/meta/classes/boot-directdisk.bbclass > @@ -64,6 +64,7 @@ SYSLINUX_ROOT ?= "root=/dev/sda2" > SYSLINUX_TIMEOUT ?= "10" > > IS_VMDK = '${@bb.utils.contains("IMAGE_FSTYPES", "vmdk", "true", "false", d)}' > +IS_VDI = '${@bb.utils.contains("IMAGE_FSTYPES", "vdi", "true", "false", d)}' > > boot_direct_populate() { > dest=$1 > @@ -101,7 +102,7 @@ build_boot_dd() { > efi_hddimg_populate $HDDDIR > fi > > - if [ "${IS_VMDK}" = "true" ]; then > + if [ "${IS_VMDK}" = "true" ] || [ "${IS_VDI}" = "true" ]; then > if [ "x${AUTO_SYSLINUXMENU}" = "x1" ] ; then > install -m 0644 ${STAGING_DIR}/${MACHINE}/usr/share/syslinux/vesamenu.c32 $HDDDIR/${SYSLINUXDIR}/ > if [ "x${SYSLINUX_SPLASH}" != "x" ] ; then > diff --git a/meta/classes/image-vdi.bbclass b/meta/classes/image-vdi.bbclass > new file mode 100644 > index 0000000..5a145a9 > --- /dev/null > +++ b/meta/classes/image-vdi.bbclass > @@ -0,0 +1,30 @@ > + > +SYSLINUX_ROOT ?= "root=/dev/sda2" > +SYSLINUX_PROMPT ?= "0" > +SYSLINUX_TIMEOUT ?= "10" > +SYSLINUX_LABELS = "boot" > +LABELS_append = " ${SYSLINUX_LABELS} " > + > +# need to define the dependency and the ROOTFS for directdisk > +do_bootdirectdisk[depends] += "${PN}:do_rootfs" > +ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_BASENAME}-${MACHINE}.ext3" > + > +# creating VDI relies on having a hddimg so ensure we inherit it here. > +inherit boot-directdisk > + > +IMAGE_TYPEDEP_vdi = "ext3" > +IMAGE_TYPES_MASKED += "vdi" > + > +create_vdi_image () { > + qemu-img convert -O vdi ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hdddirect ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.vdi > + ln -sf ${IMAGE_NAME}.vdi ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.vdi > +} > + > +python do_vdiimg() { > + bb.build.exec_func('create_vdi_image', d) > +} > + > +addtask vdiimg after do_bootdirectdisk before do_build > + > +do_vdiimg[depends] += "qemu-native:do_populate_sysroot" > + Is there any way that we can create a shared class for vmdk and vdi since the difference between the two classes is vmdk -> vdi? Can this be a variable and/or parameter-ized some how? I know it's a small class, but the code duplication could cause other problems down the line. Sau! > diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass > index dc9bd80..578747f 100644 > --- a/meta/classes/image.bbclass > +++ b/meta/classes/image.bbclass > @@ -127,11 +127,14 @@ def build_live(d): > return "image-live" > > IMAGE_TYPE_live = "${@build_live(d)}" > - > inherit ${IMAGE_TYPE_live} > + > IMAGE_TYPE_vmdk = '${@bb.utils.contains("IMAGE_FSTYPES", "vmdk", "image-vmdk", "", d)}' > inherit ${IMAGE_TYPE_vmdk} > > +IMAGE_TYPE_vdi = '${@bb.utils.contains("IMAGE_FSTYPES", "vdi", "image-vdi", "", d)}' > +inherit ${IMAGE_TYPE_vdi} > + > python () { > deps = " " + imagetypes_getdepends(d) > d.appendVarFlag('do_rootfs', 'depends', deps) > diff --git a/meta/classes/image_types.bbclass b/meta/classes/image_types.bbclass > index 72c7337..d86d108 100644 > --- a/meta/classes/image_types.bbclass > +++ b/meta/classes/image_types.bbclass > @@ -13,7 +13,7 @@ def imagetypes_getdepends(d): > deps = [] > ctypes = d.getVar('COMPRESSIONTYPES', True).split() > for type in (d.getVar('IMAGE_FSTYPES', True) or "").split(): > - if type in ["vmdk", "live", "iso", "hddimg"]: > + if type in ["vmdk", "vdi", "live", "iso", "hddimg"]: > type = "ext3" > basetype = type > for ctype in ctypes: > @@ -155,6 +155,7 @@ IMAGE_TYPES = " \ > tar tar.gz tar.bz2 tar.xz tar.lz4 \ > cpio cpio.gz cpio.xz cpio.lzma cpio.lz4 \ > vmdk \ > + vdi \ > elf \ > " > > @@ -181,5 +182,5 @@ DEPLOYABLE_IMAGE_TYPES ?= "hddimg iso" > IMAGE_EXTENSION_live = "hddimg iso" > > # The IMAGE_TYPES_MASKED variable will be used to mask out from the IMAGE_FSTYPES, > -# images that will not be built at do_rootfs time: vmdk, hddimg, iso, etc. > +# images that will not be built at do_rootfs time: vmdk, vdi, hddimg, iso, etc. > IMAGE_TYPES_MASKED ?= "" > diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass > index cca39c9..3d4bae5 100644 > --- a/meta/classes/sanity.bbclass > +++ b/meta/classes/sanity.bbclass > @@ -822,6 +822,10 @@ def check_sanity_everybuild(status, d): > # Check vmdk and live can't be built together. > if 'vmdk' in d.getVar('IMAGE_FSTYPES', True) and 'live' in d.getVar('IMAGE_FSTYPES', True): > status.addresult("Error, IMAGE_FSTYPES vmdk and live can't be built together\n") > + > + # Check vdi and live can't be built together. > + if 'vdi' in d.getVar('IMAGE_FSTYPES', True) and 'live' in d.getVar('IMAGE_FSTYPES', True): > + status.addresult("Error, IMAGE_FSTYPES vdi and live can't be built together\n") > > def check_sanity(sanity_data): > import subprocess > diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf > index 3a918e8..1305c32 100644 > --- a/meta/conf/documentation.conf > +++ b/meta/conf/documentation.conf > @@ -58,6 +58,7 @@ do_uboot_mkimage[doc] = "Creates a uImage file from the kernel for the U-Boot bo > do_unpack[doc] = "Unpacks the source code into a working directory" > do_validate_branches[doc] = "Ensures that the source/meta branches are on the locations specified by their SRCREV values for a linux-yocto style kernel" > do_vmdkimg[doc] = "Creates a .vmdk image for use with VMware and compatible virtual machine hosts" > +do_vdiimg[doc] = "Creates a .vdi image for use with VirtualBox and compatible virtual machine hosts" > > # DESCRIPTIONS FOR VARIABLES # > > diff --git a/meta/lib/oe/image.py b/meta/lib/oe/image.py > index 0ce303d..40f6151 100644 > --- a/meta/lib/oe/image.py > +++ b/meta/lib/oe/image.py > @@ -66,7 +66,7 @@ class ImageDepGraph(object): > return graph > > def _clean_graph(self): > - # Live and VMDK images will be processed via inheriting > + # Live and VMDK/VDI images will be processed via inheriting > # bbclass and does not get processed here. Remove them from the fstypes > # graph. Their dependencies are already added, so no worries here. > remove_list = (self.d.getVar('IMAGE_TYPES_MASKED', True) or "").split() > @@ -76,7 +76,7 @@ class ImageDepGraph(object): > > def _image_base_type(self, type): > ctypes = self.d.getVar('COMPRESSIONTYPES', True).split() > - if type in ["vmdk", "live", "iso", "hddimg"]: > + if type in ["vmdk", "vdi", "live", "iso", "hddimg"]: > type = "ext3" > basetype = type > for ctype in ctypes: > diff --git a/meta/recipes-devtools/qemu/qemu.inc b/meta/recipes-devtools/qemu/qemu.inc > index 4225db7..cbe9425 100644 > --- a/meta/recipes-devtools/qemu/qemu.inc > +++ b/meta/recipes-devtools/qemu/qemu.inc > @@ -90,7 +90,7 @@ PACKAGECONFIG ??= " \ > fdt sdl alsa \ > ${@bb.utils.contains('DISTRO_FEATURES', 'xen', 'xen', '', d)} \ > " > -PACKAGECONFIG_class-native ??= "fdt alsa" > +PACKAGECONFIG_class-native ??= "fdt alsa uuid" > PACKAGECONFIG_class-nativesdk ??= "fdt sdl" > NATIVEDEPS = "" > NATIVEDEPS_class-native = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libxext-native', '',d)}" > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mail.openembedded.org (Postfix) with ESMTP id 626B073EFD for ; Mon, 11 May 2015 23:29:02 +0000 (UTC) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga101.jf.intel.com with ESMTP; 11 May 2015 16:28:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,411,1427785200"; d="scan'208,217";a="724325144" Received: from orsmsx102.amr.corp.intel.com ([10.22.225.129]) by fmsmga002.fm.intel.com with ESMTP; 11 May 2015 16:28:45 -0700 Received: from orsmsx111.amr.corp.intel.com (10.22.240.12) by ORSMSX102.amr.corp.intel.com (10.22.225.129) with Microsoft SMTP Server (TLS) id 14.3.224.2; Mon, 11 May 2015 16:28:45 -0700 Received: from orsmsx109.amr.corp.intel.com ([169.254.2.224]) by ORSMSX111.amr.corp.intel.com ([169.254.11.85]) with mapi id 14.03.0224.002; Mon, 11 May 2015 16:28:45 -0700 From: "Bystricky, Juro" To: "Burton, Ross" Thread-Topic: [PATCH] Add support for VirtualBox VDI images Thread-Index: AQHQid/5GeN2AFApB0GfMskkDxnLC513E3aAgABcPGA= Date: Mon, 11 May 2015 23:28:44 +0000 Message-ID: <6E51916E4A1F32428260031F4C7CD2B610199363@ORSMSX109.amr.corp.intel.com> References: <1431124779-28516-1-git-send-email-juro.bystricky@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.22.254.140] MIME-Version: 1.0 Cc: OE-core Subject: Re: [PATCH] Add support for VirtualBox VDI images X-BeenThere: openembedded-core@lists.openembedded.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Patches and discussions about the oe-core layer List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 May 2015 23:29:04 -0000 Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_6E51916E4A1F32428260031F4C7CD2B610199363ORSMSX109amrcor_" --_000_6E51916E4A1F32428260031F4C7CD2B610199363ORSMSX109amrcor_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T0ssIG5vIHByb2JsZW0uDQpTYXVsIGFsc28gc3VnZ2VzdGVkIG1lcmdpbmcgaW1hZ2Utdm1kayBh bmQgaW1hZ2UtdmRpIGNsYXNzZXMgaW50byBvbmUgY2xhc3MsDQpzb21ldGhpbmcgbGlrZSBpbWFn ZS12bS5iYmNsYXNzLiBJdCBpcyBhIGJpdCBtb3JlIGludmFzaXZlICh3aWxsIG1vZGlmeSB0aGUg ZXhpc3Rpbmcgdm1kaw0KYmJjbGFzcykgLCBidXQgaXQgc2hvdWxkIGJlIGEgY2xlYW5lciBpbXBs ZW1lbnRhdGlvbiBvdmVyYWxsLg0KDQpKdXJvDQoNCkZyb206IEJ1cnRvbiwgUm9zcyBbbWFpbHRv OnJvc3MuYnVydG9uQGludGVsLmNvbV0NClNlbnQ6IE1vbmRheSwgTWF5IDExLCAyMDE1IDM6NTUg QU0NClRvOiBCeXN0cmlja3ksIEp1cm8NCkNjOiBPRS1jb3JlOyBTYXVsIFdvbGQNClN1YmplY3Q6 IFJlOiBbUEFUQ0hdIEFkZCBzdXBwb3J0IGZvciBWaXJ0dWFsQm94IFZESSBpbWFnZXMNCg0KVGhh bmtzIEp1cm8sDQoNCk9uIDggTWF5IDIwMTUgYXQgMjM6MzksIEp1cm8gQnlzdHJpY2t5IDxqdXJv LmJ5c3RyaWNreUBpbnRlbC5jb208bWFpbHRvOmp1cm8uYnlzdHJpY2t5QGludGVsLmNvbT4+IHdy b3RlOg0KWW9jdG8gZG9lcyBub3Qgc3VwcG9ydCBWaXJ0dWFsQm94IHNwYXJzZSBpbWFnZSBWREkg ZmlsZSBmb3JtYXQuDQpUaGlzIGNvdWxkIGJlIGFjaGlldmVkIGJ5IHRoZSBhdHRhY2hlZCBwYXRj aC4gVGhlIHN1cHBvcnQgbWltaWNzDQp0aGUgVk1ESyBzdXBwb3J0IGZvciBWTXdhcmUuIFRoZSBv bmx5IHN1YnRsZSBkaWZmZXJlbmNlIGlzIHRoYXQNCnFlbXUtbmF0aXZlIGhhcyBiZSBiZSBidWls dCB3aXRoIHV1aWQgZW5hYmxlZCwgYXMgVkRJIGltYWdlcw0KbmVlZCBhIHZhbGlkIFVVSUQgaW4g b3JkZXIgdG8gYmUgcmVjb2duaXplZCBieSBWaXJ0dWFsQm94Lg0KDQpbWU9DVE8gIzczNzRdDQoN ClRoaXMgbmVlZHMgdG8gYmUgc3BsaXQgdXAgaW50byBsb2dpY2FsIHBhdGNoZXMuICBGb3IgZXhh bXBsZSBvbmUgdG8gZW5hYmxlIFVVSUQgaW50byBRZW11LCBvbmUgdG8gYWRkIHRoZSBuZXcgaW1h Z2UgdHlwZSwgYW5vdGhlciB0byB1cGRhdGUgdGhlIGNoZWNrcy4NCg0KUm9zcw0K --_000_6E51916E4A1F32428260031F4C7CD2B610199363ORSMSX109amrcor_ Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxl PjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6 IkNhbWJyaWEgTWF0aCI7DQoJcGFub3NlLTE6MiA0IDUgMyA1IDQgNiAzIDIgNDt9DQpAZm9udC1m YWNlDQoJe2ZvbnQtZmFtaWx5OkNhbGlicmk7DQoJcGFub3NlLTE6MiAxNSA1IDIgMiAyIDQgMyAy IDQ7fQ0KLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8NCnAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWws IGRpdi5Nc29Ob3JtYWwNCgl7bWFyZ2luOjBpbjsNCgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQoJ Zm9udC1zaXplOjEyLjBwdDsNCglmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIixzZXJpZjt9 DQphOmxpbmssIHNwYW4uTXNvSHlwZXJsaW5rDQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsNCglj b2xvcjpibHVlOw0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0KYTp2aXNpdGVkLCBzcGFu Lk1zb0h5cGVybGlua0ZvbGxvd2VkDQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsNCgljb2xvcjpw dXJwbGU7DQoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQpzcGFuLkVtYWlsU3R5bGUxNw0K CXttc28tc3R5bGUtdHlwZTpwZXJzb25hbC1yZXBseTsNCglmb250LWZhbWlseToiQ2FsaWJyaSIs c2Fucy1zZXJpZjsNCgljb2xvcjojMUY0OTdEO30NCi5Nc29DaHBEZWZhdWx0DQoJe21zby1zdHls ZS10eXBlOmV4cG9ydC1vbmx5Ow0KCWZvbnQtc2l6ZToxMC4wcHQ7DQoJZm9udC1mYW1pbHk6IkNh bGlicmkiLHNhbnMtc2VyaWY7fQ0KQHBhZ2UgV29yZFNlY3Rpb24xDQoJe3NpemU6OC41aW4gMTEu MGluOw0KCW1hcmdpbjoxLjBpbiAxLjBpbiAxLjBpbiAxLjBpbjt9DQpkaXYuV29yZFNlY3Rpb24x DQoJe3BhZ2U6V29yZFNlY3Rpb24xO30NCi0tPjwvc3R5bGU+PCEtLVtpZiBndGUgbXNvIDldPjx4 bWw+DQo8bzpzaGFwZWRlZmF1bHRzIHY6ZXh0PSJlZGl0IiBzcGlkbWF4PSIxMDI2IiAvPg0KPC94 bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWxheW91dCB2 OmV4dD0iZWRpdCI+DQo8bzppZG1hcCB2OmV4dD0iZWRpdCIgZGF0YT0iMSIgLz4NCjwvbzpzaGFw ZWxheW91dD48L3htbD48IVtlbmRpZl0tLT4NCjwvaGVhZD4NCjxib2R5IGxhbmc9IkVOLVVTIiBs aW5rPSJibHVlIiB2bGluaz0icHVycGxlIj4NCjxkaXYgY2xhc3M9IldvcmRTZWN0aW9uMSI+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZh bWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+T0ssIG5v IHByb2JsZW0uPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw YW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90 OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPlNhdWwgYWxzbyBzdWdnZXN0ZWQgbWVyZ2luZyBp bWFnZS12bWRrIGFuZCBpbWFnZS12ZGkgY2xhc3NlcyBpbnRvIG9uZSBjbGFzcyw8bzpwPjwvbzpw Pjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6 IzFGNDk3RCI+c29tZXRoaW5nIGxpa2UgaW1hZ2Utdm0uYmJjbGFzcy4gSXQgaXMgYSBiaXQgbW9y ZSBpbnZhc2l2ZSAod2lsbCBtb2RpZnkgdGhlIGV4aXN0aW5nIHZtZGs8bzpwPjwvbzpwPjwvc3Bh bj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBw dDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3 RCI+YmJjbGFzcykgLCBidXQgaXQgc2hvdWxkIGJlIGEgY2xlYW5lciBpbXBsZW1lbnRhdGlvbiBv dmVyYWxsLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFu IHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDss c2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZh bWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+SnVybzxv OnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJm b250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJp Zjtjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8ZGl2IHN0eWxl PSJib3JkZXI6bm9uZTtib3JkZXItbGVmdDpzb2xpZCBibHVlIDEuNXB0O3BhZGRpbmc6MGluIDBp biAwaW4gNC4wcHQiPg0KPGRpdj4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25lO2JvcmRlci10b3A6 c29saWQgI0UxRTFFMSAxLjBwdDtwYWRkaW5nOjMuMHB0IDBpbiAwaW4gMGluIj4NCjxwIGNsYXNz PSJNc29Ob3JtYWwiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5 OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZiI+RnJvbTo8L3NwYW4+PC9iPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fu cy1zZXJpZiI+IEJ1cnRvbiwgUm9zcyBbbWFpbHRvOnJvc3MuYnVydG9uQGludGVsLmNvbV0NCjxi cj4NCjxiPlNlbnQ6PC9iPiBNb25kYXksIE1heSAxMSwgMjAxNSAzOjU1IEFNPGJyPg0KPGI+VG86 PC9iPiBCeXN0cmlja3ksIEp1cm88YnI+DQo8Yj5DYzo8L2I+IE9FLWNvcmU7IFNhdWwgV29sZDxi cj4NCjxiPlN1YmplY3Q6PC9iPiBSZTogW1BBVENIXSBBZGQgc3VwcG9ydCBmb3IgVmlydHVhbEJv eCBWREkgaW1hZ2VzPG86cD48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPGRpdj4NCjxkaXY+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj5UaGFua3MgSnVybyw8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRp dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPGRpdj4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiPk9uIDggTWF5IDIwMTUgYXQgMjM6MzksIEp1cm8gQnlzdHJpY2t5 ICZsdDs8YSBocmVmPSJtYWlsdG86anVyby5ieXN0cmlja3lAaW50ZWwuY29tIiB0YXJnZXQ9Il9i bGFuayI+anVyby5ieXN0cmlja3lAaW50ZWwuY29tPC9hPiZndDsgd3JvdGU6PG86cD48L286cD48 L3A+DQo8YmxvY2txdW90ZSBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6c29saWQgI0ND Q0NDQyAxLjBwdDtwYWRkaW5nOjBpbiAwaW4gMGluIDYuMHB0O21hcmdpbi1sZWZ0OjQuOHB0O21h cmdpbi10b3A6NS4wcHQ7bWFyZ2luLXJpZ2h0OjBpbjttYXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxk aXYgaWQ9IjoyYngiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+WW9jdG8gZG9lcyBub3Qgc3VwcG9y dCBWaXJ0dWFsQm94IHNwYXJzZSBpbWFnZSBWREkgZmlsZSBmb3JtYXQuPGJyPg0KVGhpcyBjb3Vs ZCBiZSBhY2hpZXZlZCBieSB0aGUgYXR0YWNoZWQgcGF0Y2guIFRoZSBzdXBwb3J0IG1pbWljczxi cj4NCnRoZSBWTURLIHN1cHBvcnQgZm9yIFZNd2FyZS4gVGhlIG9ubHkgc3VidGxlIGRpZmZlcmVu Y2UgaXMgdGhhdDxicj4NCnFlbXUtbmF0aXZlIGhhcyBiZSBiZSBidWlsdCB3aXRoIHV1aWQgZW5h YmxlZCwgYXMgVkRJIGltYWdlczxicj4NCm5lZWQgYSB2YWxpZCBVVUlEIGluIG9yZGVyIHRvIGJl IHJlY29nbml6ZWQgYnkgVmlydHVhbEJveC48YnI+DQo8YnI+DQpbWU9DVE8gIzczNzRdPG86cD48 L286cD48L3A+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PGJyPg0KVGhpcyBuZWVkcyB0byBiZSBzcGxpdCB1cCBpbnRvIGxvZ2ljYWwgcGF0Y2hl cy4mbmJzcDsgRm9yIGV4YW1wbGUgb25lIHRvIGVuYWJsZSBVVUlEIGludG8gUWVtdSwgb25lIHRv IGFkZCB0aGUgbmV3IGltYWdlIHR5cGUsIGFub3RoZXIgdG8gdXBkYXRlIHRoZSBjaGVja3MuPG86 cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZu YnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPlJvc3M8 bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9ib2R5Pg0K PC9odG1sPg0K --_000_6E51916E4A1F32428260031F4C7CD2B610199363ORSMSX109amrcor_--