From owner-freebsd-arch Mon Aug 26 17: 0:22 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C452237B400 for ; Mon, 26 Aug 2002 17:00:14 -0700 (PDT) Received: from sccrmhc01.attbi.com (sccrmhc01.attbi.com [204.127.202.61]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2D20343E3B for ; Mon, 26 Aug 2002 17:00:14 -0700 (PDT) (envelope-from julian@elischer.org) Received: from InterJet.elischer.org ([12.232.206.8]) by sccrmhc01.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id <20020827000013.PIEY11061.sccrmhc01.attbi.com@InterJet.elischer.org> for ; Tue, 27 Aug 2002 00:00:13 +0000 Received: from localhost (localhost.elischer.org [127.0.0.1]) by InterJet.elischer.org (8.9.1a/8.9.1) with ESMTP id QAA84369 for ; Mon, 26 Aug 2002 16:42:56 -0700 (PDT) Date: Mon, 26 Aug 2002 16:42:55 -0700 (PDT) From: Julian Elischer To: arch@freebsd.org Subject: Process/thread states. Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Ok so I've mentionned this to a few peopel at different times and not got any real feedback/pushback.. time fopr a wider audience. Lookingf at teh states that a thread can be in, I've come to teh conclusion that it;s not really just one easy set of states, but a graph which includes 2 and posssibly 3 independent orthogonal componets. One of my aims during teh KSE changes was to make the td_state variable truely represent the state of the thread when not under the sched lock. (Under Schedlock there can be transitional inconsitancies). However the more I look at it I see that what used to be a simple selection of: SSLEEP SRUN SSTOP SINTR is really a tremdous simplification, and often incorrect. The state is suplementted by such things as: the non-NULL-ness of th wchan field and other information regarding the swap state. As a result of this, many places that wnat to make a decision based on state of the thread (was process in 4.x) need to make extra tests which are easy to leave out.. e.g. something like: if ((td->td_state == TDS_RUNQ) && (td->td_wchan == NULL)) This is how you see if the thread is on teh run queue but not on the sleep queue.. yet teh fact that td->td_wchan == NULL isn a rather unintuative way of suplementing the state to discover if the process/thread is sleeping, especially if later on the test becomes if (td->td_state == TDS_SLP) If the test is REALLY (td->td_wchan != NULL) then why bother having a state SSLEEP (or TDS_SLP) at all? the best answer I think is to extent the state definitions to include the possibility of some orthogonal components.. e.g. something like: (yeah I know its messy but...): #define TD_ST_SUSPQ 0x01 /* uses runq field */ #define TD_ST_RUNQ 0x02 /* uses runq field */ #define TD_ST_RUNNING 0x03 /* uses no (virtual) field */ #define TD_ST_MTX 0x04 /* uses mtx field */ #define TD_ST_RQ_MASK 0x07 /* mask of non sleep states */ #define TD_ST_SLPQ 0x08 /* uses slpq field */ enum thread_state { TDS_UNQUEUED = 0x00, TDS_SLP = TD_ST_SLPQ, TDS_RUNQ = TD_ST_RUNQ, TDS_RUNNING = TD_ST_RUNNING, TDS_SUSPENDED = TD_ST_SUSPQ, TDS_MTX = TD_ST_MTX, TDS_SUSP_SLP = TD_ST_SUSPQ|TD_ST_SLPQ, TDS_RUN_SLP = TD_ST_RUNNING|TD_ST_SLPQ, TDS_RUNQ_SLP = TD_ST_RUNQ|TD_ST_SLPQ, TDS_MTX_SLP = TD_ST_MTX|TD_ST_SLPQ, TDS_SWAPPING = TD_ST_SLPQ|TD_ST_RQ_MASK + 1, TDS_IWAIT, /* needed? */ TDS_SURPLUS /* needed? */ }; this is becasue it is quite legal for the thread to be on the suspended queue AND on the sleep queue.. (!) this happens during msleep (and the CV code) and NOT under the sched lock either.. During this time the process can be 'awakened' by a 'wakeup()' which will take it off the sleep queue so that when the suspension ends, the thread does not continue into teh full sleep, but instead returns. Similarly, the thread can be on the sleep queue AND on the run queue, or even on the sleep queue but actually running. All outside of the protection of the schedlock. By allowing code to set and clear jsut the bit that represents the presense on teh sleep queue, teh sorrect state can be maintained, and the thread state can actually be used to make decisions. It is possible that the SWAPPING state may be expanded in a similar manner as well. (I haven't really examined it recently) I think the following thread state components are mutually exclusive: On the run queue. Actually running. On the processes suspend queue. On a mutex's blocked queue. orthognal to those might be:: On the sleep queue. (which can and does occur while in the above states) Not Fully swapped in, (which MAY (not sure yet) occur to a thread that is a in at least one of the basic states, and the sleep state). I'm not sure if TDS_IWAIT is needed any more and TDS_SURPLUS can pretty surely go away I think. anyway.. I'm, puting this out in -arch because I'm sure this would create howls of complaint from people if I "just did it". It seems to me that it may clean up quirte a bit of code around the sleeping and suspension parts of the system, and remove some "traps for young players" (I ran into one last week hence this RFC). over to you guys.. Particularly those who HATE the idea. p.s. for bonus points: could the mutex blocked chain be implemented using the linkage field in teh thread struct already used by the suspend and run queues, since they are all (I think) mutually exclusive..? To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Mon Aug 26 17: 4: 8 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7BBDA37B400 for ; Mon, 26 Aug 2002 17:04:06 -0700 (PDT) Received: from elvis.mu.org (elvis.mu.org [192.203.228.196]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0D7AB43E6A for ; Mon, 26 Aug 2002 17:04:06 -0700 (PDT) (envelope-from bright@elvis.mu.org) Received: by elvis.mu.org (Postfix, from userid 1192) id EA893AE163; Mon, 26 Aug 2002 17:04:04 -0700 (PDT) Date: Mon, 26 Aug 2002 17:04:04 -0700 From: Alfred Perlstein To: Julian Elischer Cc: arch@freebsd.org Subject: Re: Process/thread states. Message-ID: <20020827000404.GM96154@elvis.mu.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG * Julian Elischer [020826 17:00] wrote: > > Ok so I've mentionned this to a few peopel at different times and not got > any real feedback/pushback.. time fopr a wider audience. ... > e.g. something like: (yeah I know its messy but...): > > > > #define TD_ST_SUSPQ 0x01 /* uses runq field */ > #define TD_ST_RUNQ 0x02 /* uses runq field */ > #define TD_ST_RUNNING 0x03 /* uses no (virtual) field */ > #define TD_ST_MTX 0x04 /* uses mtx field */ > #define TD_ST_RQ_MASK 0x07 /* mask of non sleep states */ > #define TD_ST_SLPQ 0x08 /* uses slpq field */ > enum thread_state { > TDS_UNQUEUED = 0x00, > TDS_SLP = TD_ST_SLPQ, > TDS_RUNQ = TD_ST_RUNQ, > TDS_RUNNING = TD_ST_RUNNING, > TDS_SUSPENDED = TD_ST_SUSPQ, > TDS_MTX = TD_ST_MTX, > TDS_SUSP_SLP = TD_ST_SUSPQ|TD_ST_SLPQ, > TDS_RUN_SLP = TD_ST_RUNNING|TD_ST_SLPQ, > TDS_RUNQ_SLP = TD_ST_RUNQ|TD_ST_SLPQ, > TDS_MTX_SLP = TD_ST_MTX|TD_ST_SLPQ, > TDS_SWAPPING = TD_ST_SLPQ|TD_ST_RQ_MASK + 1, > TDS_IWAIT, /* needed? */ > TDS_SURPLUS /* needed? */ > }; This seems good, another option would be to mostly expose things through a functional interface, like proc_set_swapping() or something. -Alfred To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Mon Aug 26 17:45:13 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 888E137B405 for ; Mon, 26 Aug 2002 17:45:06 -0700 (PDT) Received: from InterJet.dellroad.org (adsl-63-194-81-26.dsl.snfc21.pacbell.net [63.194.81.26]) by mx1.FreeBSD.org (Postfix) with ESMTP id D5B8D43E6E for ; Mon, 26 Aug 2002 17:45:05 -0700 (PDT) (envelope-from archie@dellroad.org) Received: from arch20m.dellroad.org (arch20m.dellroad.org [10.1.1.20]) by InterJet.dellroad.org (8.9.1a/8.9.1) with ESMTP id RAA38284; Mon, 26 Aug 2002 17:41:43 -0700 (PDT) Received: (from archie@localhost) by arch20m.dellroad.org (8.11.6/8.11.6) id g7R0ehu36981; Mon, 26 Aug 2002 17:40:43 -0700 (PDT) (envelope-from archie) From: Archie Cobbs Message-Id: <200208270040.g7R0ehu36981@arch20m.dellroad.org> Subject: Re: Process/thread states. In-Reply-To: "from Julian Elischer at Aug 26, 2002 04:42:55 pm" To: Julian Elischer Date: Mon, 26 Aug 2002 17:40:43 -0700 (PDT) Cc: arch@FreeBSD.ORG X-Mailer: ELM [version 2.4ME+ PL88 (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Julian Elischer writes: > #define TD_ST_SUSPQ 0x01 /* uses runq field */ > #define TD_ST_RUNQ 0x02 /* uses runq field */ > #define TD_ST_RUNNING 0x03 /* uses no (virtual) field */ > #define TD_ST_MTX 0x04 /* uses mtx field */ > #define TD_ST_RQ_MASK 0x07 /* mask of non sleep states */ > #define TD_ST_SLPQ 0x08 /* uses slpq field */ > enum thread_state { > TDS_UNQUEUED = 0x00, > TDS_SLP = TD_ST_SLPQ, > TDS_RUNQ = TD_ST_RUNQ, > TDS_RUNNING = TD_ST_RUNNING, > TDS_SUSPENDED = TD_ST_SUSPQ, > TDS_MTX = TD_ST_MTX, > TDS_SUSP_SLP = TD_ST_SUSPQ|TD_ST_SLPQ, > TDS_RUN_SLP = TD_ST_RUNNING|TD_ST_SLPQ, > TDS_RUNQ_SLP = TD_ST_RUNQ|TD_ST_SLPQ, > TDS_MTX_SLP = TD_ST_MTX|TD_ST_SLPQ, > TDS_SWAPPING = TD_ST_SLPQ|TD_ST_RQ_MASK + 1, > TDS_IWAIT, /* needed? */ > TDS_SURPLUS /* needed? */ > }; I like your idea.. it makes things clearer because they are more explicit. Whenever "implicit developer knowledge" is required to do something correctly that's more opportunity for bugs. If you comment those flags in the header file(s) really well, that's even better. Especially all of the cases where there is any duplicate or inter-dependent state, which can be evil. E.g., if TDS_SLP always implies wchan != NULL, then that should be commented somewhere. That is, any 'trickiness' in an object's state like depedence between fields or special invariants should either be very clearly documented or else hidden behind an object-like functional interface (like Alfred suggested). -Archie __________________________________________________________________________ Archie Cobbs * Packet Design * http://www.packetdesign.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Mon Aug 26 17:57:54 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 68A2537B400 for ; Mon, 26 Aug 2002 17:57:51 -0700 (PDT) Received: from gull.mail.pas.earthlink.net (gull.mail.pas.earthlink.net [207.217.120.84]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0FB5343E3B for ; Mon, 26 Aug 2002 17:57:51 -0700 (PDT) (envelope-from tlambert2@mindspring.com) Received: from pool0018.cvx21-bradley.dialup.earthlink.net ([209.179.192.18] helo=mindspring.com) by gull.mail.pas.earthlink.net with esmtp (Exim 3.33 #1) id 17jUfy-0003T9-00; Mon, 26 Aug 2002 17:57:47 -0700 Message-ID: <3D6ACE3A.3D17935B@mindspring.com> Date: Mon, 26 Aug 2002 17:56:26 -0700 From: Terry Lambert X-Mailer: Mozilla 4.79 [en] (Win98; U) X-Accept-Language: en MIME-Version: 1.0 To: Archie Cobbs Cc: Julian Elischer , arch@FreeBSD.ORG Subject: Re: Process/thread states. References: <200208270040.g7R0ehu36981@arch20m.dellroad.org> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Archie Cobbs wrote: > Julian Elischer writes: > > #define TD_ST_SUSPQ 0x01 /* uses runq field */ > > #define TD_ST_RUNQ 0x02 /* uses runq field */ > > #define TD_ST_RUNNING 0x03 /* uses no (virtual) field */ > > #define TD_ST_MTX 0x04 /* uses mtx field */ > > #define TD_ST_RQ_MASK 0x07 /* mask of non sleep states */ > > #define TD_ST_SLPQ 0x08 /* uses slpq field */ > > enum thread_state { [ ... ] > I like your idea.. it makes things clearer because they are more > explicit. Whenever "implicit developer knowledge" is required to > do something correctly that's more opportunity for bugs. > > If you comment those flags in the header file(s) really well, > that's even better. Especially all of the cases where there is > any duplicate or inter-dependent state, which can be evil. > > E.g., if TDS_SLP always implies wchan != NULL, then that should be > commented somewhere. > > That is, any 'trickiness' in an object's state like depedence between > fields or special invariants should either be very clearly documented > or else hidden behind an object-like functional interface (like Alfred > suggested). The part that causes me a little bit of pain is that the compares will all end up having to be: if ( (x & VALUE) == VALUE) or if ( (x & VALUE) != VALUE) To get them out of the bitmaps. This makes the compares look a little cleaner (I guess) but it doubles the number of cycles for each one, when the common case is/should be that only one bit is significant (e.g. the use of McCarthy operators like && and || save work on failure/success, respectively). I guess there is no way to refactor the code so that the depndencies don't have to be tested? -- Terry To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Mon Aug 26 20:20:26 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 932AB37B400 for ; Mon, 26 Aug 2002 20:20:13 -0700 (PDT) Received: from sccrmhc02.attbi.com (sccrmhc02.attbi.com [204.127.202.62]) by mx1.FreeBSD.org (Postfix) with ESMTP id ACAA443E65 for ; Mon, 26 Aug 2002 20:20:11 -0700 (PDT) (envelope-from julian@elischer.org) Received: from InterJet.elischer.org ([12.232.206.8]) by sccrmhc02.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id <20020827032010.MKPX13899.sccrmhc02.attbi.com@InterJet.elischer.org>; Tue, 27 Aug 2002 03:20:10 +0000 Received: from localhost (localhost.elischer.org [127.0.0.1]) by InterJet.elischer.org (8.9.1a/8.9.1) with ESMTP id UAA85088; Mon, 26 Aug 2002 20:07:48 -0700 (PDT) Date: Mon, 26 Aug 2002 20:07:46 -0700 (PDT) From: Julian Elischer To: Terry Lambert Cc: Archie Cobbs , arch@FreeBSD.ORG Subject: Re: Process/thread states. In-Reply-To: <3D6ACE3A.3D17935B@mindspring.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On Mon, 26 Aug 2002, Terry Lambert wrote: > Archie Cobbs wrote: > > Julian Elischer writes: > > > #define TD_ST_SUSPQ 0x01 /* uses runq field */ > > > #define TD_ST_RUNQ 0x02 /* uses runq field */ > > > #define TD_ST_RUNNING 0x03 /* uses no (virtual) field */ > > > #define TD_ST_MTX 0x04 /* uses mtx field */ > > > #define TD_ST_RQ_MASK 0x07 /* mask of non sleep states */ > > > #define TD_ST_SLPQ 0x08 /* uses slpq field */ > > > enum thread_state { > [ ... ] > > > I like your idea.. it makes things clearer because they are more > > explicit. Whenever "implicit developer knowledge" is required to > > do something correctly that's more opportunity for bugs. > > > > If you comment those flags in the header file(s) really well, > > that's even better. Especially all of the cases where there is > > any duplicate or inter-dependent state, which can be evil. > > > > E.g., if TDS_SLP always implies wchan != NULL, then that should be > > commented somewhere. > > > > That is, any 'trickiness' in an object's state like depedence between > > fields or special invariants should either be very clearly documented > > or else hidden behind an object-like functional interface (like Alfred > > suggested). > > > The part that causes me a little bit of pain is that the compares > will all end up having to be: > > if ( (x & VALUE) == VALUE) > > or > > if ( (x & VALUE) != VALUE) > > To get them out of the bitmaps. This makes the compares look a > little cleaner (I guess) but it doubles the number of cycles for > each one, when the common case is/should be that only one bit is > significant (e.g. the use of McCarthy operators like && and || > save work on failure/success, respectively). > > I guess there is no way to refactor the code so that the depndencies > don't have to be tested? One test could be: if (td->td_state == TDS_RUNQ) this is a big win becasue it also tests that you are NOT on the sleep queue. only way to test them completely separatly would be to put the m in separate words.. if ( (td->td_state1 == TDS_RUNQ) && (td->td_flags & TDF_ONSLPQ == 0)) but at the moment that looks like: if ( (td->td_state == TDS_RUNQ) && (td->td_wchan == 0)) which is not so different and harder to remember to do all the time.. if you didn't care about the condition of the sleep queue then you would have reverse efficienciess.. e.g. if ((td->td_state & TDS_MASK) == TDS_RUNQ) vs if (td->td_state1 == TDS_RUNQ) vs if (td->td_state == TDS_RUNQ) you win sometimes you lose other times.. the thing that bothers me is that in the current situation, you have this thing called SLEEP state, but what it really means is "SLEEP in the absence of anythign better" state and it doesn;t even reflect whether or not the thread can be awakenned, or is on the sleep queue, because that is a completely differnet test. I'd like to do it with inlines and MACROs as much as possible, but there are som places where it gets tricky to do so.. e.g. in the mutex code.. > > -- Terry > To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Wed Aug 28 13:59:11 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C834737B400 for ; Wed, 28 Aug 2002 13:59:08 -0700 (PDT) Received: from elvis.mu.org (elvis.mu.org [192.203.228.196]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8D19743E42 for ; Wed, 28 Aug 2002 13:59:08 -0700 (PDT) (envelope-from baka@elvis.mu.org) Received: by elvis.mu.org (Postfix, from userid 1921) id 717ADAE1EE; Wed, 28 Aug 2002 13:59:08 -0700 (PDT) Date: Wed, 28 Aug 2002 13:59:08 -0700 From: Jon Mini To: Julian Elischer Cc: arch@FreeBSD.ORG Subject: Re: Process/thread states. Message-ID: <20020828205908.GB3751@elvis.mu.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.3.27i Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Julian Elischer [julian@elischer.org] wrote : > #define TD_ST_SUSPQ 0x01 /* uses runq field */ > #define TD_ST_RUNQ 0x02 /* uses runq field */ > #define TD_ST_RUNNING 0x03 /* uses no (virtual) field */ > #define TD_ST_MTX 0x04 /* uses mtx field */ > #define TD_ST_RQ_MASK 0x07 /* mask of non sleep states */ > #define TD_ST_SLPQ 0x08 /* uses slpq field */ + #define TD_ST_UNBOUND 0x10 /* not bound to a KSE */ + #define TD_ST_UPCALL 0x20 /* scheduled for upcall */ > enum thread_state { > TDS_UNQUEUED = 0x00, > TDS_SLP = TD_ST_SLPQ, > TDS_RUNQ = TD_ST_RUNQ, > TDS_RUNNING = TD_ST_RUNNING, > TDS_SUSPENDED = TD_ST_SUSPQ, > TDS_MTX = TD_ST_MTX, > TDS_SUSP_SLP = TD_ST_SUSPQ|TD_ST_SLPQ, > TDS_RUN_SLP = TD_ST_RUNNING|TD_ST_SLPQ, > TDS_RUNQ_SLP = TD_ST_RUNQ|TD_ST_SLPQ, > TDS_MTX_SLP = TD_ST_MTX|TD_ST_SLPQ, > TDS_SWAPPING = TD_ST_SLPQ|TD_ST_RQ_MASK + 1, > TDS_IWAIT, /* needed? */ | TDS_SURPLUS = TDS_UNQUEUED|TD_ST_UNBOUND, + TDS_UPCALLING = TD_ST_RUNQ|TD_ST_UPCALL > }; This would make upcalls walk through the states like this: - In the UMA slab, the thread is TDS_SURPLUS - allocated as kse->ke_tdspare, still TDS_SURPLUS - thread_schedule_upcall() grabs it, and it becomes TDS_UPCALLING - thread_userret() sees it, it gets bound to a KSE, and becomes TDS_RUNNING just like any other currently running thread. I hate to add another state, especially for one so fleeting, but the current use of td_flags for this strikes me as a bit bogus. OTOH, "unused" (TDS_SURPLUS) is a totally valid state. -- Jonathan Mini http://www.freebsd.org/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Wed Aug 28 16: 2: 1 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1B97437B400; Wed, 28 Aug 2002 16:01:58 -0700 (PDT) Received: from corbulon.video-collage.com (corbulon.video-collage.com [64.35.99.179]) by mx1.FreeBSD.org (Postfix) with ESMTP id D848C43E7B; Wed, 28 Aug 2002 16:01:56 -0700 (PDT) (envelope-from mi+mx@aldan.algebra.com) Received: from misha.murex.com (250-217.customer.cloud9.net [168.100.250.217]) by corbulon.video-collage.com (8.12.2/8.12.2) with ESMTP id g7SN1qe5092067 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=FAIL); Wed, 28 Aug 2002 19:01:54 -0400 (EDT) (envelope-from mi+mx@aldan.algebra.com) X-Authentication-Warning: corbulon.video-collage.com: Host 250-217.customer.cloud9.net [168.100.250.217] claimed to be misha.murex.com Content-Type: text/plain; charset="us-ascii" From: Mikhail Teterin Organization: Virtual Estates, Inc. To: arch@FreeBSD.org Subject: pkg-routines ignore the recorded md5 checksums Date: Wed, 28 Aug 2002 19:02:51 -0400 User-Agent: KMail/1.4.2 Cc: jkh@FreeBSD.org MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-Id: <200208281902.51959.mi+mx@aldan.algebra.com> X-Scanned-By: MIMEDefang 2.15 (www dot roaringpenguin dot com slash mimedefang) Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Hello! Could someone with a little bit free time, please, take a look at the http://www.FreeBSD.org/cgi/query-pr.cgi?pr=bin/34628 and, may be, commit the patch included? It is sitting in the "open" state since February, without any objections, but without any actions either. Thank you very much! -mi To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Wed Aug 28 18: 0:42 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 851F837B401; Wed, 28 Aug 2002 18:00:37 -0700 (PDT) Received: from sccrmhc02.attbi.com (sccrmhc02.attbi.com [204.127.202.62]) by mx1.FreeBSD.org (Postfix) with ESMTP id 77BBA43E42; Wed, 28 Aug 2002 18:00:36 -0700 (PDT) (envelope-from julian@elischer.org) Received: from InterJet.elischer.org ([12.232.206.8]) by sccrmhc02.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id <20020829010035.HKJD13899.sccrmhc02.attbi.com@InterJet.elischer.org>; Thu, 29 Aug 2002 01:00:35 +0000 Received: from localhost (localhost.elischer.org [127.0.0.1]) by InterJet.elischer.org (8.9.1a/8.9.1) with ESMTP id RAA94770; Wed, 28 Aug 2002 17:43:22 -0700 (PDT) Date: Wed, 28 Aug 2002 17:43:20 -0700 (PDT) From: Julian Elischer To: Jon Mini Cc: arch@FreeBSD.ORG Subject: Re: Process/thread states. In-Reply-To: <20020828205908.GB3751@elvis.mu.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On Wed, 28 Aug 2002, Jon Mini wrote: > Julian Elischer [julian@elischer.org] wrote : > > > #define TD_ST_SUSPQ 0x01 /* uses runq field */ > > #define TD_ST_RUNQ 0x02 /* uses runq field */ > > #define TD_ST_RUNNING 0x03 /* uses no (virtual) field */ > > #define TD_ST_MTX 0x04 /* uses mtx field */ > > #define TD_ST_RQ_MASK 0x07 /* mask of non sleep states */ > > #define TD_ST_SLPQ 0x08 /* uses slpq field */ > + #define TD_ST_UNBOUND 0x10 /* not bound to a KSE */ > + #define TD_ST_UPCALL 0x20 /* scheduled for upcall */ > > enum thread_state { > > TDS_UNQUEUED = 0x00, > > TDS_SLP = TD_ST_SLPQ, > > TDS_RUNQ = TD_ST_RUNQ, > > TDS_RUNNING = TD_ST_RUNNING, > > TDS_SUSPENDED = TD_ST_SUSPQ, > > TDS_MTX = TD_ST_MTX, > > TDS_SUSP_SLP = TD_ST_SUSPQ|TD_ST_SLPQ, > > TDS_RUN_SLP = TD_ST_RUNNING|TD_ST_SLPQ, > > TDS_RUNQ_SLP = TD_ST_RUNQ|TD_ST_SLPQ, > > TDS_MTX_SLP = TD_ST_MTX|TD_ST_SLPQ, > > TDS_SWAPPING = TD_ST_SLPQ|TD_ST_RQ_MASK + 1, > > TDS_IWAIT, /* needed? */ > | TDS_SURPLUS = TDS_UNQUEUED|TD_ST_UNBOUND, > + TDS_UPCALLING = TD_ST_RUNQ|TD_ST_UPCALL > > }; > > This would make upcalls walk through the states like this: > - In the UMA slab, the thread is TDS_SURPLUS The value there is "undefined". The CTOR should give it a known value. > - allocated as kse->ke_tdspare, still TDS_SURPLUS TDS_UNQUEUED. > - thread_schedule_upcall() grabs it, and it becomes TDS_UPCALLING No I think it's TDS_RUNQ then.. with a qualifier in the flags of "Upcalling". Upcalling is not a scheduler (run/stop/sleep/runq) state in my opinion. It is a qualifier on how it where it will run but not how/when/if. > - thread_userret() sees it, it gets bound to a KSE, and becomes > TDS_RUNNING just like any other currently running thread. It MUST already be running by that time. Anything that is running must be in state RUNNING.. (please!) > > I hate to add another state, especially for one so fleeting, but the current > use of td_flags for this strikes me as a bit bogus. I think is is a flag to control it's flow of execution, and not a shceduling state... differnt thing. I think.. > > OTOH, "unused" (TDS_SURPLUS) is a totally valid state. I think that UNQUEUED could be it.. it means Not at all under the control of the scheduler or friends. What makes it even worse is that it looks like it MAY have to look like this: #define TD_ST_SUSPQ 0x01 /* uses runq field */ #define TD_ST_RUNQ 0x02 /* uses runq field */ #define TD_ST_RUNNING 0x03 /* uses no (virtual) field */ #define TD_ST_MTX 0x04 /* uses mtx field */ #define TD_ST_RQ_MASK 0x07 /* mask of non sleep states */ #define TD_ST_SLPQ 0x08 /* uses slpq field */ #define TD_ST_SWAPPPED 0x10 /* uses slpq field */ enum thread_state { TDS_UNQUEUED = 0x00, TDS_SLP = TD_ST_SLPQ, TDS_RUNQ = TD_ST_RUNQ, TDS_RUNNING = TD_ST_RUNNING, TDS_SUSPENDED = TD_ST_SUSPQ, TDS_MTX = TD_ST_MTX, TDS_SUSP_SLP = TD_ST_SUSPQ|TD_ST_SLPQ, TDS_RUN_SLP = TD_ST_RUNNING|TD_ST_SLPQ, TDS_RUNQ_SLP = TD_ST_RUNQ|TD_ST_SLPQ, TDS_MTX_SLP = TD_ST_MTX|TD_ST_SLPQ, TDS_SWAP_SLP = TD_ST_SWAPPED|TD_ST_SLPQ, TDS_SWAP_SUSP = TD_ST_SWAPPED|TD_ST_SUSPQ, TDS_SWAP_SUSP_SLP = TD_ST_SWAPPED|TD_ST_SLPQ|TD_ST_SUSPQ, }; This is because threads may be on their processes suspended queue AND on a sleep queue, (due to catching a SIGSTOP in msleep) AND be swapped out. It is important that the fact that they are on these two queues NOT BE LOST, in fact while the thread is swapped out (i.e. kernel stack and pcb are swapped out), a wakeup() event may occur, and it needs to be able to remove it from the sleep queue at that time. The SIGCONT couls also occur which means that the threads should be taken off the suspended queue as well. All while 'swapped out' the only thing that can't be done is to put it on the run queue or to run it while it's swapped out, (or probably be blocked on a mutex). Now, if a thread is unsuspended and woken up while swapped out, then when swapped in again how do we work out what to do with it? "if not asleep or blocked it must be runnable?" I guess that's what happens now,.. anyhow look at teh diagram I just posted to -arch. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Thu Aug 29 20:57:14 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C104A37B406; Thu, 29 Aug 2002 20:57:04 -0700 (PDT) Received: from jkh-gw.queasyweasel.com (adsl-64-173-3-158.dsl.sntc01.pacbell.net [64.173.3.158]) by mx1.FreeBSD.org (Postfix) with ESMTP id C558943E3B; Thu, 29 Aug 2002 20:56:58 -0700 (PDT) (envelope-from jkh@queasyweasel.com) Received: from adsl-64-173-15-99.dsl.sntc01.pacbell.net (jkh@mango.freebsd.com [64.173.15.99]) by jkh-gw.queasyweasel.com (8.12.5/8.12.5) with ESMTP id g7U3sLWh021364; Thu, 29 Aug 2002 20:54:32 -0700 (PDT) (envelope-from jkh@queasyweasel.com) Date: Thu, 29 Aug 2002 20:54:22 -0700 Subject: Re: pkg-routines ignore the recorded md5 checksums Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v543) Cc: arch@FreeBSD.org, jkh@FreeBSD.org To: Mikhail Teterin From: Jordan K Hubbard In-Reply-To: <200208281902.51959.mi+mx@aldan.algebra.com> Message-Id: <2B4C0937-BBCC-11D6-A85D-0003938C7B7E@queasyweasel.com> Content-Transfer-Encoding: 7bit X-Mailer: Apple Mail (2.543) Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG I'm not sure these diffs are entirely correct. For one thing, they make some rather broad assumptions about the contents of @comment fields, MD5 checksums being only *one* possible type of data stored there. Also, the indentation style doesn't come close to matching that of the surrounding code. :) On Wednesday, August 28, 2002, at 04:02 PM, Mikhail Teterin wrote: > Hello! > > Could someone with a little bit free time, please, take a look at > the > > http://www.FreeBSD.org/cgi/query-pr.cgi?pr=bin/34628 > > and, may be, commit the patch included? It is sitting in the "open" > state since February, without any objections, but without any actions > either. Thank you very much! > > -mi > > -- Jordan K. Hubbard Engineering Manager, BSD technology group Apple Computer To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Sat Aug 31 0: 9:25 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5631237B400; Sat, 31 Aug 2002 00:09:21 -0700 (PDT) Received: from obsecurity.dyndns.org (adsl-64-165-226-146.dsl.lsan03.pacbell.net [64.165.226.146]) by mx1.FreeBSD.org (Postfix) with ESMTP id A1E0643E65; Sat, 31 Aug 2002 00:09:19 -0700 (PDT) (envelope-from kris@obsecurity.org) Received: by obsecurity.dyndns.org (Postfix, from userid 1000) id 1CE5966D83; Sat, 31 Aug 2002 00:09:19 -0700 (PDT) Date: Sat, 31 Aug 2002 00:09:18 -0700 From: Kris Kennaway To: Jordan K Hubbard Cc: Mikhail Teterin , arch@FreeBSD.org, jkh@FreeBSD.org Subject: Re: pkg-routines ignore the recorded md5 checksums Message-ID: <20020831070918.GA72640@xor.obsecurity.org> References: <200208281902.51959.mi+mx@aldan.algebra.com> <2B4C0937-BBCC-11D6-A85D-0003938C7B7E@queasyweasel.com> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="6c2NcOVqGQ03X4Wi" Content-Disposition: inline In-Reply-To: <2B4C0937-BBCC-11D6-A85D-0003938C7B7E@queasyweasel.com> User-Agent: Mutt/1.4i Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG --6c2NcOVqGQ03X4Wi Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Aug 29, 2002 at 08:54:22PM -0700, Jordan K Hubbard wrote: > I'm not sure these diffs are entirely correct. For one thing, they make= =20 > some rather broad assumptions about the contents of @comment fields,=20 > MD5 checksums being only *one* possible type of data stored there. =20 > Also, the indentation style doesn't come close to matching that of the=20 > surrounding code. :) Why are md5 checksums stored in @comment in the first place, instead of in a @md5 directive? Kris --6c2NcOVqGQ03X4Wi Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (FreeBSD) iD8DBQE9cGueWry0BWjoQKURAj+kAJ0WfRlimwm8Dpeqi9QmoJpKzkdbDQCg0RV1 6nb6I6W2wCMIeJn+qqrR5CM= =V+Fc -----END PGP SIGNATURE----- --6c2NcOVqGQ03X4Wi-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Sat Aug 31 0:27:15 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 34B5937B4D0; Sat, 31 Aug 2002 00:27:10 -0700 (PDT) Received: from jkh-gw.queasyweasel.com (adsl-64-173-3-158.dsl.sntc01.pacbell.net [64.173.3.158]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9027943E42; Sat, 31 Aug 2002 00:27:09 -0700 (PDT) (envelope-from jkh@queasyweasel.com) Received: from adsl-64-173-15-99.dsl.sntc01.pacbell.net (jkh@mango.freebsd.com [64.173.15.99]) by jkh-gw.queasyweasel.com (8.12.5/8.12.5) with ESMTP id g7V7QiWh025208; Sat, 31 Aug 2002 00:26:48 -0700 (PDT) (envelope-from jkh@queasyweasel.com) Date: Sat, 31 Aug 2002 00:26:51 -0700 Subject: Re: pkg-routines ignore the recorded md5 checksums Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v543) Cc: Mikhail Teterin , arch@FreeBSD.org, jkh@FreeBSD.org To: Kris Kennaway From: Jordan K Hubbard In-Reply-To: <20020831070918.GA72640@xor.obsecurity.org> Message-Id: <049EDAFB-BCB3-11D6-A85D-0003938C7B7E@queasyweasel.com> Content-Transfer-Encoding: 7bit X-Mailer: Apple Mail (2.543) Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Hysterical Raisins. We didn't even think of adding md5 checksums until about a year or so after the pkg_install tools were done, and there was concern at that point that adding another @foo directive would create a set of "new packages" which didn't work with the older package tools. So it was decided to simply make them a special type of comment, which the previous package tools would simply ignore. In hindsight, of course... - Jordan On Saturday, August 31, 2002, at 12:09 AM, Kris Kennaway wrote: > On Thu, Aug 29, 2002 at 08:54:22PM -0700, Jordan K Hubbard wrote: >> I'm not sure these diffs are entirely correct. For one thing, they >> make >> some rather broad assumptions about the contents of @comment fields, >> MD5 checksums being only *one* possible type of data stored there. >> Also, the indentation style doesn't come close to matching that of the >> surrounding code. :) > > Why are md5 checksums stored in @comment in the first place, instead > of in a @md5 directive? > > Kris > -- Jordan K. Hubbard Engineering Manager, BSD technology group Apple Computer To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Sat Aug 31 0:38:54 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AF80B37B400; Sat, 31 Aug 2002 00:38:50 -0700 (PDT) Received: from obsecurity.dyndns.org (adsl-64-165-226-146.dsl.lsan03.pacbell.net [64.165.226.146]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1C1B243E6A; Sat, 31 Aug 2002 00:38:50 -0700 (PDT) (envelope-from kris@obsecurity.org) Received: by obsecurity.dyndns.org (Postfix, from userid 1000) id 507C066D83; Sat, 31 Aug 2002 00:38:45 -0700 (PDT) Date: Sat, 31 Aug 2002 00:38:45 -0700 From: Kris Kennaway To: Jordan K Hubbard Cc: Kris Kennaway , Mikhail Teterin , arch@FreeBSD.org, jkh@FreeBSD.org Subject: Re: pkg-routines ignore the recorded md5 checksums Message-ID: <20020831073845.GA74568@xor.obsecurity.org> References: <20020831070918.GA72640@xor.obsecurity.org> <049EDAFB-BCB3-11D6-A85D-0003938C7B7E@queasyweasel.com> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="huq684BweRXVnRxX" Content-Disposition: inline In-Reply-To: <049EDAFB-BCB3-11D6-A85D-0003938C7B7E@queasyweasel.com> User-Agent: Mutt/1.4i Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG --huq684BweRXVnRxX Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Aug 31, 2002 at 12:26:51AM -0700, Jordan K Hubbard wrote: > Hysterical Raisins. We didn't even think of adding md5 checksums until= =20 > about a year or so after the pkg_install tools were done, and there was= =20 > concern at that point that adding another @foo directive would create a= =20 > set of "new packages" which didn't work with the older package tools. =20 > So it was decided to simply make them a special type of comment, which=20 > the previous package tools would simply ignore. In hindsight, of=20 > course... Perhaps we should change plist.c to make unrecognised commands non-fatal, so we can have more flexibility about extending the commandset in future. Kris Untested patch: Index: usr.sbin/pkg_install/lib/plist.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /usr2/ncvs/src/usr.sbin/pkg_install/lib/plist.c,v retrieving revision 1.29.2.9 diff -u -r1.29.2.9 plist.c --- usr.sbin/pkg_install/lib/plist.c 20 Aug 2002 06:35:08 -0000 1.29.2.9 +++ usr.sbin/pkg_install/lib/plist.c 31 Aug 2002 07:37:51 -0000 @@ -276,7 +276,7 @@ cmd =3D plist_cmd(pline + 1, &cp); if (cmd =3D=3D FAIL) { cleanup(0); - errx(2, "%s: bad command '%s'", __func__, pline); + warnx("%s: unknown command '%s' (package tools out of date?)", __func= __, pline); } if (*cp =3D=3D '\0') { cp =3D NULL; --huq684BweRXVnRxX Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (FreeBSD) iD8DBQE9cHKEWry0BWjoQKURAl3eAKCnmMJfi6HkCfpC47f+JlAZi2p3jQCg3AcC iG2lDrxBRivUM5msXcAZFAU= =SUVo -----END PGP SIGNATURE----- --huq684BweRXVnRxX-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Sat Aug 31 1:39:33 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1DE0437B400; Sat, 31 Aug 2002 01:39:26 -0700 (PDT) Received: from obsecurity.dyndns.org (adsl-64-165-226-146.dsl.lsan03.pacbell.net [64.165.226.146]) by mx1.FreeBSD.org (Postfix) with ESMTP id 125BB43E42; Sat, 31 Aug 2002 01:39:25 -0700 (PDT) (envelope-from kris@obsecurity.org) Received: by obsecurity.dyndns.org (Postfix, from userid 1000) id 6B10066BF3; Sat, 31 Aug 2002 01:39:24 -0700 (PDT) Date: Sat, 31 Aug 2002 01:39:23 -0700 From: Kris Kennaway To: Kris Kennaway Cc: Jordan K Hubbard , Mikhail Teterin , arch@FreeBSD.org, jkh@FreeBSD.org Subject: Re: pkg-routines ignore the recorded md5 checksums Message-ID: <20020831083923.GA90468@xor.obsecurity.org> References: <20020831070918.GA72640@xor.obsecurity.org> <049EDAFB-BCB3-11D6-A85D-0003938C7B7E@queasyweasel.com> <20020831073845.GA74568@xor.obsecurity.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="EeQfGwPcQSOJBaQU" Content-Disposition: inline In-Reply-To: <20020831073845.GA74568@xor.obsecurity.org> User-Agent: Mutt/1.4i Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG --EeQfGwPcQSOJBaQU Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Aug 31, 2002 at 12:38:45AM -0700, Kris Kennaway wrote: > Perhaps we should change plist.c to make unrecognised commands > non-fatal, so we can have more flexibility about extending the > commandset in future. Just for fun, I made the following patch which adds commands @md5, @origin, @deporigin (while still recognizing the older @comment forms). I'd like to commit it after a transition period of a 4.x release or so with my previous patch that makes unknown commands non-fatal. Kris Index: create/pl.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /usr2/ncvs/src/usr.sbin/pkg_install/create/pl.c,v retrieving revision 1.13.2.7 diff -u -r1.13.2.7 pl.c --- create/pl.c 20 Aug 2002 06:35:07 -0000 1.13.2.7 +++ create/pl.c 31 Aug 2002 07:54:57 -0000 @@ -67,8 +67,8 @@ if (cp !=3D NULL) { PackingList tmp =3D new_plist_entry(); =20 - tmp->name =3D copy_string(strconcat("MD5:", cp)); - tmp->type =3D PLIST_COMMENT; + tmp->name =3D copy_string(cp); + tmp->type =3D PLIST_MD5; tmp->next =3D p->next; tmp->prev =3D p; p->next =3D tmp; Index: info/show.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /usr2/ncvs/src/usr.sbin/pkg_install/info/show.c,v retrieving revision 1.32 diff -u -r1.32 show.c --- info/show.c 11 May 2002 04:17:55 -0000 1.32 +++ info/show.c 31 Aug 2002 08:33:26 -0000 @@ -154,7 +154,7 @@ break; =20 case PLIST_DEPORIGIN: - printf(Quiet ? "@comment DEPORIGIN:%s\n" : + printf(Quiet ? "@deporigin %s\n" : "\tdependency origin: %s\n", p->name); break; =20 @@ -173,8 +173,12 @@ break; =20 case PLIST_ORIGIN: - printf(Quiet ? "@comment ORIGIN:%s\n" : + printf(Quiet ? "@origin %s\n" : "\tPackage origin: %s\n", p->name);=20 + break; + + case PLIST_MD5: + printf(Quiet ? "@md5 %s\n" : "\tMD5 sum: %s\n", p->name); break; =20 default: Index: lib/lib.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /usr2/ncvs/src/usr.sbin/pkg_install/lib/lib.h,v retrieving revision 1.29.2.10 diff -u -r1.29.2.10 lib.h --- lib/lib.h 2 Aug 2002 11:09:05 -0000 1.29.2.10 +++ lib/lib.h 31 Aug 2002 08:29:06 -0000 @@ -91,7 +91,7 @@ PLIST_CHOWN, PLIST_CHGRP, PLIST_COMMENT, PLIST_IGNORE, PLIST_NAME, PLIST_UNEXEC, PLIST_SRC, PLIST_DISPLAY, PLIST_PKGDEP, PLIST_MTREE, PLIST_DIR_RM, PLIST_IGNORE_INST, - PLIST_OPTION, PLIST_ORIGIN, PLIST_DEPORIGIN + PLIST_OPTION, PLIST_ORIGIN, PLIST_DEPORIGIN, PLIST_MD5 }; typedef enum _plist_t plist_t; =20 Index: lib/plist.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /usr2/ncvs/src/usr.sbin/pkg_install/lib/plist.c,v retrieving revision 1.29.2.9 diff -u -r1.29.2.9 plist.c --- lib/plist.c 20 Aug 2002 06:35:08 -0000 1.29.2.9 +++ lib/plist.c 31 Aug 2002 08:29:20 -0000 @@ -222,6 +222,10 @@ return PLIST_CHOWN; else if (!strcmp(cmd, "group")) return PLIST_CHGRP; + else if (!strcmp(cmd, "origin")) + return PLIST_ORIGIN; + else if (!strcmp(cmd, "deporigin")) + return PLIST_DEPORIGIN; else if (!strcmp(cmd, "comment")) { if (!strncmp(*arg, "ORIGIN:", 7)) { *arg +=3D 7; @@ -247,6 +251,8 @@ return PLIST_DIR_RM; else if (!strcmp(cmd, "option")) return PLIST_OPTION; + else if (!strcmp(cmd, "md5")) + return PLIST_MD5; else return FAIL; } @@ -276,7 +282,7 @@ cmd =3D plist_cmd(pline + 1, &cp); if (cmd =3D=3D FAIL) { cleanup(0); - errx(2, "%s: bad command '%s'", __func__, pline); + warnx("%s: unknown command '%s' (package tools out of date?)", __func= __, pline); } if (*cp =3D=3D '\0') { cp =3D NULL; @@ -376,11 +382,15 @@ break; =20 case PLIST_ORIGIN: - fprintf(fp, "%ccomment ORIGIN:%s\n", CMD_CHAR, plist->name); + fprintf(fp, "%corigin %s\n", CMD_CHAR, plist->name); break; =20 case PLIST_DEPORIGIN: - fprintf(fp, "%ccomment DEPORIGIN:%s\n", CMD_CHAR, plist->name); + fprintf(fp, "%cdeporigin %s\n", CMD_CHAR, plist->name); + break; + + case PLIST_MD5: + fprintf(fp, "%cmd5 %s\n", CMD_CHAR, plist->name); break; =20 default: @@ -443,8 +453,15 @@ "this packing list is incorrect - ignoring delete request", tmp); } else { - if (p->next && p->next->type =3D=3D PLIST_COMMENT && !strncmp(p->next->n= ame, "MD5:", 4)) { - char *cp =3D NULL, buf[33]; + if (p->next && (( p->next->type =3D=3D PLIST_COMMENT && + !strncmp(p->next->name, "MD5:", 4)) || + p->next->type =3D=3D PLIST_MD5 )) { + char *cp =3D NULL, buf[33], offset; + + if ( p->next->type =3D=3D PLIST_MD5) + offset =3D 0; + else + offset =3D 4; =20 /* * For packing lists whose version is 1.1 or greater, the md5 @@ -462,7 +479,7 @@ =20 if (cp !=3D NULL) { /* Mismatch? */ - if (strcmp(cp, p->next->name + 4)) { + if (strcmp(cp, p->next->name + offset)) { warnx("`%s' fails original MD5 checksum - %s", tmp, Force ? "deleted anyway." : "not deleted."); if (!Force) { --EeQfGwPcQSOJBaQU Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (FreeBSD) iD8DBQE9cIC6Wry0BWjoQKURApIWAKDxR16z2IHY9MFZQS1VBpYzwRAgsACeNE9J vJA10kcNP8kK8lDynbyy0U8= =2K+k -----END PGP SIGNATURE----- --EeQfGwPcQSOJBaQU-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Sat Aug 31 2:25:37 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 715D037B400; Sat, 31 Aug 2002 02:25:34 -0700 (PDT) Received: from jkh-gw.queasyweasel.com (adsl-64-173-3-158.dsl.sntc01.pacbell.net [64.173.3.158]) by mx1.FreeBSD.org (Postfix) with ESMTP id B032643E65; Sat, 31 Aug 2002 02:25:33 -0700 (PDT) (envelope-from jkh@queasyweasel.com) Received: from adsl-64-173-15-99.dsl.sntc01.pacbell.net (jkh@mango.freebsd.com [64.173.15.99]) by jkh-gw.queasyweasel.com (8.12.5/8.12.5) with ESMTP id g7V9PGWh025348; Sat, 31 Aug 2002 02:25:20 -0700 (PDT) (envelope-from jkh@queasyweasel.com) Date: Sat, 31 Aug 2002 02:25:23 -0700 Subject: Re: pkg-routines ignore the recorded md5 checksums Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v543) Cc: Mikhail Teterin , arch@FreeBSD.org, jkh@FreeBSD.org To: Kris Kennaway From: Jordan K Hubbard In-Reply-To: <20020831073845.GA74568@xor.obsecurity.org> Message-Id: <936EE14E-BCC3-11D6-A85D-0003938C7B7E@queasyweasel.com> Content-Transfer-Encoding: 7bit X-Mailer: Apple Mail (2.543) Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Works for me... Go for it. On Saturday, August 31, 2002, at 12:38 AM, Kris Kennaway wrote: > On Sat, Aug 31, 2002 at 12:26:51AM -0700, Jordan K Hubbard wrote: >> Hysterical Raisins. We didn't even think of adding md5 checksums >> until >> about a year or so after the pkg_install tools were done, and there >> was >> concern at that point that adding another @foo directive would create >> a >> set of "new packages" which didn't work with the older package tools. >> So it was decided to simply make them a special type of comment, which >> the previous package tools would simply ignore. In hindsight, of >> course... > > Perhaps we should change plist.c to make unrecognised commands > non-fatal, so we can have more flexibility about extending the > commandset in future. > > Kris > > Untested patch: > > Index: usr.sbin/pkg_install/lib/plist.c > =================================================================== > RCS file: /usr2/ncvs/src/usr.sbin/pkg_install/lib/plist.c,v > retrieving revision 1.29.2.9 > diff -u -r1.29.2.9 plist.c > --- usr.sbin/pkg_install/lib/plist.c 20 Aug 2002 06:35:08 > -0000 1.29.2.9 > +++ usr.sbin/pkg_install/lib/plist.c 31 Aug 2002 07:37:51 -0000 > @@ -276,7 +276,7 @@ > cmd = plist_cmd(pline + 1, &cp); > if (cmd == FAIL) { > cleanup(0); > - errx(2, "%s: bad command '%s'", __func__, pline); > + warnx("%s: unknown command '%s' (package tools out of date?)", > __func__, pline); > } > if (*cp == '\0') { > cp = NULL; > -- Jordan K. Hubbard Engineering Manager, BSD technology group Apple Computer To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Sat Aug 31 2:26:43 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 48A5137B400; Sat, 31 Aug 2002 02:26:34 -0700 (PDT) Received: from jkh-gw.queasyweasel.com (adsl-64-173-3-158.dsl.sntc01.pacbell.net [64.173.3.158]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7DFC143E6E; Sat, 31 Aug 2002 02:26:33 -0700 (PDT) (envelope-from jkh@queasyweasel.com) Received: from adsl-64-173-15-99.dsl.sntc01.pacbell.net (jkh@mango.freebsd.com [64.173.15.99]) by jkh-gw.queasyweasel.com (8.12.5/8.12.5) with ESMTP id g7V9QKWh025358; Sat, 31 Aug 2002 02:26:20 -0700 (PDT) (envelope-from jkh@queasyweasel.com) Date: Sat, 31 Aug 2002 02:26:28 -0700 Subject: Re: pkg-routines ignore the recorded md5 checksums Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v543) Cc: Mikhail Teterin , arch@FreeBSD.ORG, jkh@FreeBSD.ORG To: Kris Kennaway From: Jordan K Hubbard In-Reply-To: <20020831083923.GA90468@xor.obsecurity.org> Message-Id: Content-Transfer-Encoding: 7bit X-Mailer: Apple Mail (2.543) Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG [review review] Looks good to me! - Jordan On Saturday, August 31, 2002, at 01:39 AM, Kris Kennaway wrote: > On Sat, Aug 31, 2002 at 12:38:45AM -0700, Kris Kennaway wrote: > >> Perhaps we should change plist.c to make unrecognised commands >> non-fatal, so we can have more flexibility about extending the >> commandset in future. > > Just for fun, I made the following patch which adds commands @md5, > @origin, @deporigin (while still recognizing the older @comment > forms). I'd like to commit it after a transition period of a 4.x > release or so with my previous patch that makes unknown commands > non-fatal. > > Kris > > Index: create/pl.c > =================================================================== > RCS file: /usr2/ncvs/src/usr.sbin/pkg_install/create/pl.c,v > retrieving revision 1.13.2.7 > diff -u -r1.13.2.7 pl.c > --- create/pl.c 20 Aug 2002 06:35:07 -0000 1.13.2.7 > +++ create/pl.c 31 Aug 2002 07:54:57 -0000 > @@ -67,8 +67,8 @@ > if (cp != NULL) { > PackingList tmp = new_plist_entry(); > > - tmp->name = copy_string(strconcat("MD5:", cp)); > - tmp->type = PLIST_COMMENT; > + tmp->name = copy_string(cp); > + tmp->type = PLIST_MD5; > tmp->next = p->next; > tmp->prev = p; > p->next = tmp; > Index: info/show.c > =================================================================== > RCS file: /usr2/ncvs/src/usr.sbin/pkg_install/info/show.c,v > retrieving revision 1.32 > diff -u -r1.32 show.c > --- info/show.c 11 May 2002 04:17:55 -0000 1.32 > +++ info/show.c 31 Aug 2002 08:33:26 -0000 > @@ -154,7 +154,7 @@ > break; > > case PLIST_DEPORIGIN: > - printf(Quiet ? "@comment DEPORIGIN:%s\n" : > + printf(Quiet ? "@deporigin %s\n" : > "\tdependency origin: %s\n", p->name); > break; > > @@ -173,8 +173,12 @@ > break; > > case PLIST_ORIGIN: > - printf(Quiet ? "@comment ORIGIN:%s\n" : > + printf(Quiet ? "@origin %s\n" : > "\tPackage origin: %s\n", p->name); > + break; > + > + case PLIST_MD5: > + printf(Quiet ? "@md5 %s\n" : "\tMD5 sum: %s\n", p->name); > break; > > default: > Index: lib/lib.h > =================================================================== > RCS file: /usr2/ncvs/src/usr.sbin/pkg_install/lib/lib.h,v > retrieving revision 1.29.2.10 > diff -u -r1.29.2.10 lib.h > --- lib/lib.h 2 Aug 2002 11:09:05 -0000 1.29.2.10 > +++ lib/lib.h 31 Aug 2002 08:29:06 -0000 > @@ -91,7 +91,7 @@ > PLIST_CHOWN, PLIST_CHGRP, PLIST_COMMENT, PLIST_IGNORE, > PLIST_NAME, PLIST_UNEXEC, PLIST_SRC, PLIST_DISPLAY, > PLIST_PKGDEP, PLIST_MTREE, PLIST_DIR_RM, PLIST_IGNORE_INST, > - PLIST_OPTION, PLIST_ORIGIN, PLIST_DEPORIGIN > + PLIST_OPTION, PLIST_ORIGIN, PLIST_DEPORIGIN, PLIST_MD5 > }; > typedef enum _plist_t plist_t; > > Index: lib/plist.c > =================================================================== > RCS file: /usr2/ncvs/src/usr.sbin/pkg_install/lib/plist.c,v > retrieving revision 1.29.2.9 > diff -u -r1.29.2.9 plist.c > --- lib/plist.c 20 Aug 2002 06:35:08 -0000 1.29.2.9 > +++ lib/plist.c 31 Aug 2002 08:29:20 -0000 > @@ -222,6 +222,10 @@ > return PLIST_CHOWN; > else if (!strcmp(cmd, "group")) > return PLIST_CHGRP; > + else if (!strcmp(cmd, "origin")) > + return PLIST_ORIGIN; > + else if (!strcmp(cmd, "deporigin")) > + return PLIST_DEPORIGIN; > else if (!strcmp(cmd, "comment")) { > if (!strncmp(*arg, "ORIGIN:", 7)) { > *arg += 7; > @@ -247,6 +251,8 @@ > return PLIST_DIR_RM; > else if (!strcmp(cmd, "option")) > return PLIST_OPTION; > + else if (!strcmp(cmd, "md5")) > + return PLIST_MD5; > else > return FAIL; > } > @@ -276,7 +282,7 @@ > cmd = plist_cmd(pline + 1, &cp); > if (cmd == FAIL) { > cleanup(0); > - errx(2, "%s: bad command '%s'", __func__, pline); > + warnx("%s: unknown command '%s' (package tools out of date?)", > __func__, pline); > } > if (*cp == '\0') { > cp = NULL; > @@ -376,11 +382,15 @@ > break; > > case PLIST_ORIGIN: > - fprintf(fp, "%ccomment ORIGIN:%s\n", CMD_CHAR, plist->name); > + fprintf(fp, "%corigin %s\n", CMD_CHAR, plist->name); > break; > > case PLIST_DEPORIGIN: > - fprintf(fp, "%ccomment DEPORIGIN:%s\n", CMD_CHAR, plist->name); > + fprintf(fp, "%cdeporigin %s\n", CMD_CHAR, plist->name); > + break; > + > + case PLIST_MD5: > + fprintf(fp, "%cmd5 %s\n", CMD_CHAR, plist->name); > break; > > default: > @@ -443,8 +453,15 @@ > "this packing list is incorrect - ignoring delete request", tmp); > } > else { > - if (p->next && p->next->type == PLIST_COMMENT && > !strncmp(p->next->name, "MD5:", 4)) { > - char *cp = NULL, buf[33]; > + if (p->next && (( p->next->type == PLIST_COMMENT && > + !strncmp(p->next->name, "MD5:", 4)) || > + p->next->type == PLIST_MD5 )) { > + char *cp = NULL, buf[33], offset; > + > + if ( p->next->type == PLIST_MD5) > + offset = 0; > + else > + offset = 4; > > /* > * For packing lists whose version is 1.1 or greater, the md5 > @@ -462,7 +479,7 @@ > > if (cp != NULL) { > /* Mismatch? */ > - if (strcmp(cp, p->next->name + 4)) { > + if (strcmp(cp, p->next->name + offset)) { > warnx("`%s' fails original MD5 checksum - %s", > tmp, Force ? "deleted anyway." : "not deleted."); > if (!Force) { > -- Jordan K. Hubbard Engineering Manager, BSD technology group Apple Computer To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Sat Aug 31 3: 7:21 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 36D8437B400 for ; Sat, 31 Aug 2002 03:07:17 -0700 (PDT) Received: from mailout04.sul.t-online.com (mailout04.sul.t-online.com [194.25.134.18]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9476F43E6A for ; Sat, 31 Aug 2002 03:07:16 -0700 (PDT) (envelope-from Alexander@Leidinger.net) Received: from fwd06.sul.t-online.de by mailout04.sul.t-online.com with smtp id 17l59H-0002ZU-05; Sat, 31 Aug 2002 12:06:35 +0200 Received: from Andro-Beta.Leidinger.net (520065502893-0001@[80.131.113.164]) by fmrl06.sul.t-online.com with esmtp id 17l597-0Q1azIC; Sat, 31 Aug 2002 12:06:25 +0200 Received: from Magelan.Leidinger.net (Magelan [192.168.1.1]) by Andro-Beta.Leidinger.net (8.11.6/8.11.6) with ESMTP id g7VA6O913810; Sat, 31 Aug 2002 12:06:24 +0200 (CEST) (envelope-from Alexander@Leidinger.net) Received: from Magelan.Leidinger.net (netchild@localhost [127.0.0.1]) by Magelan.Leidinger.net (8.12.5/8.12.5) with SMTP id g7VA6NQn000584; Sat, 31 Aug 2002 12:06:23 +0200 (CEST) (envelope-from Alexander@Leidinger.net) Date: Sat, 31 Aug 2002 12:06:23 +0200 From: Alexander Leidinger To: Kris Kennaway Cc: jkh@queasyweasel.com, mi+mx@aldan.algebra.com, arch@FreeBSD.ORG Subject: Re: pkg-routines ignore the recorded md5 checksums Message-Id: <20020831120623.4c4bc41d.Alexander@Leidinger.net> In-Reply-To: <20020831083923.GA90468@xor.obsecurity.org> References: <20020831070918.GA72640@xor.obsecurity.org> <049EDAFB-BCB3-11D6-A85D-0003938C7B7E@queasyweasel.com> <20020831073845.GA74568@xor.obsecurity.org> <20020831083923.GA90468@xor.obsecurity.org> Organization: Independend X-Mailer: Sylpheed version 0.8.1claws (GTK+ 1.2.10; i386-portbld-freebsd5.0) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Sender: 520065502893-0001@t-dialin.net Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On Sat, 31 Aug 2002 01:39:23 -0700 Kris Kennaway wrote: > > Perhaps we should change plist.c to make unrecognised commands > > non-fatal, so we can have more flexibility about extending the > > commandset in future. > > Just for fun, I made the following patch which adds commands @md5, > @origin, @deporigin (while still recognizing the older @comment > forms). I'd like to commit it after a transition period of a 4.x > release or so with my previous patch that makes unknown commands > non-fatal. What about commiting the ability to recognize such commands now, and only put them into use in +CONTENTS after such a transition period? Or was this your intention? Bye, Alexander. -- There's no place like ~ http://www.Leidinger.net Alexander @ Leidinger.net GPG fingerprint = C518 BC70 E67F 143F BE91 3365 79E2 9C60 B006 3FE7 To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message From owner-freebsd-arch Sat Aug 31 5:43:23 2002 Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7A7D337B400 for ; Sat, 31 Aug 2002 05:41:54 -0700 (PDT) Received: from relay4.kornet.net (relay4.kornet.net [211.48.62.164]) by mx1.FreeBSD.org (Postfix) with ESMTP id A95B143E6A for ; Sat, 31 Aug 2002 05:41:49 -0700 (PDT) (envelope-from ggaggung13@kornet.net) Received: from you10-l4kjkpuq6 (61.73.15.232) by relay4.kornet.net; 31 Aug 2002 21:41:24 +0900 Message-ID: <3d70b98b3dc2b14c@relay4.kornet.net> (added by relay4.kornet.net) From: =?ks_c_5601-1987?B?x/a06yDEq7XlILCzwM4gvLOw6Lvn?= To: freebsd-arch@freebsd.org Subject: =?ks_c_5601-1987?B?W7GksO1dIGZyZWVic2QtYXJjaLTUIMDnuczA1rTCILvnwLrHsMC7ILXluLO0z7TZLg==?= Date: Sat, 31 Aug 2002 20:49:50 +0900 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0207_01C0F49A.93A50C00" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG This is a multi-part message in MIME format. ------=_NextPart_000_0207_01C0F49A.93A50C00 Content-Type: text/plain; charset="ks_c_5601-1987" Content-Transfer-Encoding: base64 vcXDu7ytuN7Az8b7IGE6bGlua3sgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IGNvbG9yOmZmZmZm Zjtmb250LXNpemU6OXB0O31hOnZpc2l0ZWQgeyB0ZXh0LWRlY29yYXRpb246bm9uZTsgY29s b3I6ZmZmZmZmO2ZvbnQtc2l6ZTo5cHQ7fWE6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246dW5k ZXJsaW5lOyBDb2xvcjojRkFCODU2O2ZvbnQtc2l6ZTo5cHQ7fWE6YWN0aXZlIHsgdGV4dC1k ZWNvcmF0aW9uOm5vbmU7Y29sb3I6I0ZBQjg1Njtmb250LXNpemU6OXB0O30tLT4geXl5ICkg fHwgKHlfY2hrID09IHl5eSAmJiBtX2NoayA+IG1tKSB8fCAoeV9jaGsgPT0geXl5ICYmIG1f Y2hrID09IG1tICYmIGRfY2hrID4gZGQpKSB7IGFsZXJ0KCIyMLy8ILnMuLjAuiC9xcO7wMwg utKwobTJx9W0z7TZLiIpOyByZXR1cm4gZmFsc2U7ICB9cmV0dXJuIHRydWU7fS8vwda5zrXu t88gw7zFqWZ1bmN0aW9uIGp1bWluY2hrKGFkdWx0KXsJanVtaW50b3QgPSAwOwlqdW1pbmFk ZCA9ICcyMzQ1Njc4OTIzNDUnOwlmb3IoaT0wO2kNCiANCiAgIA0KICAgICAgDQogDQogICAg IAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICC8urjtICAJCSAgICAgwda5 zrXut88gufjIoyAoIi0iwNS3wikgDQogICAgICAgICAgICAgICAgICAgICAgICAgwffA5SDA /MitICAgICAgyN6068b5ICANCiAgICAgICAgIA0KvcWx1CDIuL/4IL+syLi68SAguOnBpg0K IMf2tOsgwNq1v8L3ILG4wNS9wyDG98DOxq4gx9LAziANCrG5s7vD1sPKIMHWwK8gurjH6Lmr t+EgsKHA1A0KIMGkuvEgwNq1v8L3IL/rx7Agx9LAzg0KICAgICAgDQogIMf2tOsgIE0gxKu1 5Q0KICAgDQoNCiAgDQq9xbHUIMi4v/ggv6zIuLrxICC46cGmDQogseK+xiDA2rW/wvcgsbjA 1L3DIMb3wM7GriDH0sDOIA0Ksbmzu8PWw8ogwdbAryC6uMfouau34SCwocDUDQogwaS68SDA 2rW/wvcgv+vHsCDH0sDODQogICAgICAgseK+xiAgs+u67be5vboNCiAgIA0KDQogICANCsby u/0gv6zIuLrxILjpwaYNCiDG98DOxq6zs7rOLLD4sPqx3SDEq7XlsOHBpiC8rbrxvbogDQog x/a068GkwK8gp6QgtOcgNDC/+CANCr+1yK0gv7m4xSDA5bTnIDIsMDAwv/ggx9LAziANCiAg ICAgIA0KICBLVCAguvTHw7bzwNoNCiAgIA0KDQogIA0Ku+e/68fRIDAuNSW4piAgutK/7MDM v/S1vbHiDQogxvK7/SC/rMi4uvEguOnBpiANCrHdwLa8rbrxvboNCiA1vu8guau34SC6uMfo IA0KDQoNCg0KICAgICAgILvntvvAxyAgvNWw4cbsseINCiAgIA0KDQogICAgILHNx8/AxyAg uN7Az8HWvNK0wiDApbytx87AuyDF68fYILz2wf3H0SCwzcDMuOcsILHXv9y/oSC+7rawx9Eg waS6uLW1ILCusO0gIMDWwfYgvsrAvcC7ILngyPy0z7TZLg0KICDAzCBFLW1haWzAuiC5373F wPy/68DMuOcsIL/4xKEgvsrAuL3HICCw5r/sIL7Gt6Egw6K/oSC43sDPwda80rimIMDUt8LH z7+pIMHWvcO46SC1ziC5+CC02b3DILjewM/AzCAgsKHB9iAgvsq1tbfPIMfPsNq9wLTPtNku DQogICANCiAgICAgICAgICAgICAgICAgICC6uyC43sDPwLogwaS6uMXrvcW6ziCxx7DtILvn x9e/oSDAx7DFIMGmuPG/oSBbsaSw7V2287DtIMelvcO1yCCxpLDtILjewM/A1LTPtNkuDQog ICAgICAgICAgICAgICAgICAgICAgILn2xrDAuyDFrLivx8+9w7jpILz2vcWwxbrOw7O4rrCh IMDMt+e+7iDB/bTPtNkuIA0KICAgICAgICAgIElmIHlvdSB3b24ndCByZWNlaXZlIGFueSBt b3JlIG1haWwgYWJvdXQgdGhpcyBzaXRlLCANCiAgcHJlc3MgYnV0dG9uIGFuZCBmaWxsIHlv dXIgZS1tYWlsIGFkZHJlc3MuIEFuZCB0aGVuIHdlIHdpbGwgbm90IHNlbmQgYW55IG1haWwg dG8geW91DQogICAgICAgICAgDQoNCiAgIA0KICAgICAgDQogICAgIA0KICAgICAgICAgICAg ZW5leHRvcEBseWNvcy5jby5rcg0KICAgICANCiAgICAgICAgIA0KICAgICAgIA0KIA0K ------=_NextPart_000_0207_01C0F49A.93A50C00 Content-Type: text/html; charset="ks_c_5601-1987" Content-Transfer-Encoding: base64 PGh0bWw+DQoNCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250 ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9ZXVjLWtyIj4NCjx0aXRsZT69xcO7vK243sDPxvsg PC90aXRsZT4NCjxTQ1JJUFQgbGFuZ3VhZ2U9amF2YXNjcmlwdD4NCjwhLS0NCmZ1bmN0aW9u IGNsaWNrTW91c2UoKQ0KCXsNCgkgIA0KCQlpZiAoKGV2ZW50LmJ1dHRvbj09MikgfHwgKGV2 ZW50LmJ1dHRvbj09Mykpew0KCQkJcmV0dXJuIChmYWxzZSk7DQoJCX0JDQoJfQ0KCQ0KCWZ1 bmN0aW9uIGNsaWNrS2V5KCkNCgl7DQoJCWlmKChldmVudC5zaGlmdEtleSkgJiYgKGV2ZW50 LmtleUNvZGUgPT0gMTIxKSkNCgkJewkJDQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0JDQoJfQ0K CQ0KCWZ1bmN0aW9uIG5vQWN0aW9uKCl7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCmRvY3Vt ZW50Lm9ubW91c2Vkb3duPWNsaWNrTW91c2UNCmRvY3VtZW50Lm9ua2V5ZG93bj1jbGlja0tl eQ0KZG9jdW1lbnQub25jb250ZXh0bWVudT1ub0FjdGlvbg0KZG9jdW1lbnQub25kcmFnc3Rh cnQ9bm9BY3Rpb24NCmRvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9bm9BY3Rpb24NCi8vLS0+DQo8 L3NjcmlwdD4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQo8IS0tDQouZm9udCB7ICBmb250 LXNpemU6IDlwdH0NCi0tPg0KYTpsaW5rew0KICAgIHRleHQtZGVjb3JhdGlvbjpub25lOyBj b2xvcjpmZmZmZmY7Zm9udC1zaXplOjlwdDt9DQphOnZpc2l0ZWQgew0KICAgIHRleHQtZGVj b3JhdGlvbjpub25lOyBjb2xvcjpmZmZmZmY7Zm9udC1zaXplOjlwdDt9DQphOmhvdmVyIHsN CiAgICB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyBDb2xvcjojRkFCODU2O2ZvbnQtc2l6 ZTo5cHQ7fQ0KYTphY3RpdmUgew0KICAgIHRleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiNG QUI4NTY7Zm9udC1zaXplOjlwdDt9DQotLT4NCjwvc3R5bGU+DQo8c2NyaXB0IGxhbmd1YWdl PSJKYXZhU2NyaXB0Ij4NCjwhLS0NCg0KZnVuY3Rpb24gc2VuZGl0KCl7DQoNCiAgICBpZiAo bWFpbGZybTEubmFtZS52YWx1ZSA9PSAiIil7DQogICAgICAgIGFsZXJ0KCK8urjtwLsgwNS3 wsfPvcq9w7/ALiIpOw0KICAgICAgICBtYWlsZnJtMS5uYW1lLmZvY3VzKCk7DQoNCiAgICAg ICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCglpZiAobWFpbGZybTEuaGFuZG51bS52YWx1ZT09 IiIpew0KCQlhbGVydCgiwPu+7rW1IMfPs6rAxyDA/MitufjIo7imIMDUt8LH2MHWvLy/5C5c blxutdG02SDA1LfCx8+9w7jpILr8uKW9xcO7wMwgsKG0ycfVtM+02S4iKTsNCgkJbWFpbGZy bTEuaGFuZG51bS5mb2N1cygpOw0KDQoJCXJldHVybiBmYWxzZTsNCgl9DQogICAgdmFyIGp1 bWluID0gbWFpbGZybTEuanVtaW4udmFsdWU7DQoNCglpZiAoanVtaW5jaGsoanVtaW4pKXsN CgkJYWxlcnQoIsHWuc617rfPufjIo7ChIL/Dudm4o8H2IL7KvcC0z7TZLiIpOw0KCQltYWls ZnJtMS5qdW1pbi5zZWxlY3QoKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KICAgIHRvZGF5 ID0gbmV3IERhdGUoKTsNCiAgICB5eSA9IHRvZGF5LmdldFllYXIoKTsNCiAgICBtbSA9IHRv ZGF5LmdldE1vbnRoKCkrMTsNCiAgICBkZCA9IHRvZGF5LmdldERhdGUoKTsNCiAgICB5eXkg PSBldmFsKHl5KSAtIGV2YWwoMTkpDQogICAgDQogICAgeV9jaGsgPSBldmFsKCIxOSIranVt aW4uc3Vic3RyaW5nKDAsMikpDQogICAgbV9jaGsgPSBldmFsKGp1bWluLnN1YnN0cmluZygy LDQpKQ0KICAgIGRfY2hrID0gZXZhbChqdW1pbi5zdWJzdHJpbmcoNCw2KSkNCg0KICAgIGlm ICgoeV9jaGsgPiB5eXkgKSB8fCAoeV9jaGsgPT0geXl5ICYmIG1fY2hrID4gbW0pIHx8ICh5 X2NoayA9PSB5eXkgJiYgbV9jaGsgPT0gbW0gJiYgZF9jaGsgPiBkZCkpIHsNCg0KICAgICAg ICBhbGVydCgiMjC8vCC5zLi4wLogvcXDu8DMILrSsKG0ycfVtM+02S4iKTsNCiAgICAgICAg cmV0dXJuIGZhbHNlOw0KICAgICAgICANCiAgICB9DQpyZXR1cm4gdHJ1ZTsNCn0NCg0KLy/B 1rnOte63zyDDvMWpDQpmdW5jdGlvbiBqdW1pbmNoayhhZHVsdCl7DQoJanVtaW50b3QgPSAw Ow0KCWp1bWluYWRkID0gJzIzNDU2Nzg5MjM0NSc7DQoNCglmb3IoaT0wO2k8MTI7aSsrKXsN Cg0KCQlqdW1pbnRvdCA9IGp1bWludG90ICsgcGFyc2VJbnQoYWR1bHQuc3Vic3RyaW5nKGks aSsxKSkgKiBwYXJzZUludChqdW1pbmFkZC5zdWJzdHJpbmcoaSxpKzEpKTsNCgl9DQoNCglq dW1pbnRvdCA9IDExLShqdW1pbnRvdCUxMSk7DQoNCglpZiAoanVtaW50b3QgPT0gMTApew0K CQlqdW1pbnRvdD0wOw0KCX0NCgllbHNlIGlmIChqdW1pbnRvdCA9PSAxMSl7DQoJCWp1bWlu dG90ID0gMTsNCgl9DQoNCglpZiAocGFyc2VJbnQoYWR1bHQuc3Vic3RyaW5nKDEyLDEzKSkg IT0ganVtaW50b3QpDQoJcmV0dXJuIHRydWUNCn0NCg0KLy8tLT4NCjwvc2NyaXB0Pg0KDQo8 L2hlYWQ+DQo8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9ImJsdWUi IHZsaW5rPSJwdXJwbGUiIGFsaW5rPSJyZWQiIG9ubG9hZD0ibWFpbGZybTEubmFtZS5mb2N1 cygpOyI+DQo8cD4mbmJzcDs8L3A+DQo8dGFibGUgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIx IiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjYzMiIgYm9yZGVyY29sb3JkYXJrPSJ3aGl0ZSIg Ym9yZGVyY29sb3JsaWdodD0iYmxhY2siIGJnY29sb3I9IndoaXRlIj4NCiAgICA8dHI+DQog ICAgICAgIDx0ZCB3aWR0aD0iOTc0Ij4NCiAgICAgICAgICAgIDxwIGFsaWduPSJjZW50ZXIi PjxpbWcgc3JjPSJodHRwOi8vaXllc2NhcmQuY29tL2ltZy83LmdpZiIgd2lkdGg9IjYzMiIg aGVpZ2h0PSIxNzQiIGJvcmRlcj0iMCI+PC9wPg0KICAgICAgICA8L3RkPg0KICAgIDwvdHI+ DQogICAgPHRyPg0KICAgICAgICA8dGQgd2lkdGg9Ijk3NCI+DQogICAgICAgICAgICANCiAg ICAgICAgICAgICAgICA8cD4mbmJzcDs8aW1nIHNyYz0iaHR0cDovL2l5ZXNjYXJkLmNvbS9p bWcvYm90dG9tNi5naWYiIHdpZHRoPSI2MjMiIGhlaWdodD0iMjExIiBib3JkZXI9IjAiPjwv cD4NCiAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICAg IDx0cj4NCiAgICAgICAgPHRkIHdpZHRoPSI5NzQiPg0KCQkNCgkJCTxmb3JtIG5hbWU9Im1h aWxmcm0xIiBhY3Rpb249Imh0dHA6Ly93d3cuaXllc2NhcmQuY29tL21haWwvaW5zZXJ0MS5h c3AiIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9InJldHVybiBzZW5kaXQoKTsiPg0KICAgICAg ICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGZvbnQgc2l6ZT0iMiIgY29sb3I9IiM2 NjY2NjYiPry6uO08L2ZvbnQ+PEZPTlQgc2l6ZT0yPiAgDQogICAgICAgICAgPC9GT05UPjxp bnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuYW1lIiBzaXplPSI2Ij4NCgkJICAmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDs8Zm9udCBzaXplPSIyIiBjb2xvcj0iIzY2NjY2NiI+wda5zrXut88g ufjIoyA8L2ZvbnQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Imp1bWluIiBzaXplPSIxNCIg bWF4bGVuZ3RoPSIxNCI+PGZvbnQgc2l6ZT0iMiIgZmFjZT0isby4siIgY29sb3I9IiM2NjY2 NjYiPigmcXVvdDstJnF1b3Q7wNS3wik8L2ZvbnQ+PGZvbnQgY29sb3I9IiM5OTk5OTkiPg0K ICAgICAgICAgIDwvZm9udD48YnI+ICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOzxmb250IHNpemU9IjIiIGNvbG9yPSIjNjY2NjY2Ij7B98DlIMD8yK0gIA0K ICAgICAgICAgIDwvZm9udD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGVsbnVtIiBzaXpl PSIxMyI+DQogICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7PGZvbnQgc2l6ZT0iMiIgY29s b3I9IiM2NjY2NjYiPsjetOvG+SA8L2ZvbnQ+PEZPTlQgc2l6ZT0yPjxpbnB1dCB0eXBlPSJ0 ZXh0IiBuYW1lPSJoYW5kbnVtIiBzaXplPSIxNSI+DQogICAgICAgICAgPC9GT05UPjxpbnB1 dCB0eXBlPSJzdWJtaXQiIG5hbWU9IlN1Ym1pdDIiIHZhbHVlPSK9xcO7Ij48L3A+DQogICAg ICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgIDwvdGQ+DQogICAgPC90cj4N CiAgICA8dHI+DQogICAgICAgIDx0ZCB3aWR0aD0iOTc0Ij48VEFCTEUgYm9yZGVyQ29sb3I9 d2hpdGUgY2VsbFNwYWNpbmc9MCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9yZGVyQ29sb3JEYXJrPXdoaXRlIGNlbGxQYWRkaW5nPTAgd2lkdGg9IjYyMSIgDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduPWNlbnRlciBib3JkZXJDb2xvckxp Z2h0PSMwMDY2OTkgYm9yZGVyPTE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDxUQk9EWT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRSPg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjMyNCI+DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDxQIGFsaWduPWxlZnQ+PEJSPjxJTUcgaGVpZ2h0PSI2 NiIgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iaHR0cDovL2l5ZXNj YXJkLmNvbS9pbWcvY2FyZF9pbWdfMjAuZ2lmIiB3aWR0aD0iMTA1IiANCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYWxpZ249bGVmdCBib3JkZXI9MD48SU1HIGhlaWdodD03 IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9Imh0dHA6Ly9peWVzY2Fy ZC5jb20vaW1nL2J1XzAxLmdpZiIgd2lkdGg9NCANCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9yZGVyPTA+IDxTUEFOIHN0eWxlPSJGT05ULVNJWkU6IDlwdCI+vcWx1CDI uL/4IL+syLi68SANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAguOnBpjxCUj48 SU1HIGhlaWdodD03IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9Imh0 dHA6Ly9peWVzY2FyZC5jb20vaW1nL2J1XzAxLmdpZiIgd2lkdGg9NCANCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYm9yZGVyPTA+IMf2tOsgwNq1v8L3ILG4wNS9wyDG98DO xq4gx9LAziA8QlI+PElNRyBoZWlnaHQ9NyANCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3JjPSJodHRwOi8vaXllc2NhcmQuY29tL2ltZy9idV8wMS5naWYiIHdpZHRoPTQg DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcj0wPiCxubO7w9bDyiDB 1sCvILq4x+i5q7fhILChwNQ8QlI+PElNRyBoZWlnaHQ9NyANCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3JjPSJodHRwOi8vaXllc2NhcmQuY29tL2ltZy9idV8wMS5naWYi IHdpZHRoPTQgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcj0wPiDB pLrxIMDatb/C9yC/68ewIMfSwM48L1NQQU4+PC9QPg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA8RElWIGFsaWduPWxlZnQ+DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgYm9yZGVyPTA+DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUQk9EWT4NCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPFRSPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA8VEQgd2lkdGg9MTUyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UD4m bmJzcDsmbmJzcDs8U1BBTiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5 bGU9IkZPTlQtU0laRTogOXB0Ij48Rk9OVCBjb2xvcj0jY2Q0NDMzPjxCPsf2tOsgDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0gxKu15TwvQj48L0ZPTlQ+PC9TUEFOPjwv UD48L1REPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9MTUy Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UCBhbGlnbj1sZWZ0PiAmbmJz cDs8L1A+PC9URD48L1RSPjwvVEJPRFk+PC9UQUJMRT48L0RJVj48L1REPg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjI5MSI+DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDxQIGFsaWduPWxlZnQ+PEJSPjxJTUcgaGVpZ2h0PSI2MyIg DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iaHR0cDovL2l5ZXNjYXJk LmNvbS9pbWcvY2FyZF9pbWdfMjEuZ2lmIiB3aWR0aD0iOTkiIA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhbGlnbj1sZWZ0IGJvcmRlcj0wPjxJTUcgaGVpZ2h0PTcgDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iaHR0cDovL2l5ZXNjYXJkLmNv bS9pbWcvYnVfMDEuZ2lmIiB3aWR0aD00IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib3JkZXI9MD4gPFNQQU4gc3R5bGU9IkZPTlQtU0laRTogOXB0Ij69xbHUIMi4v/gg v6zIuLrxIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICC46cGmPEJSPjxJTUcg aGVpZ2h0PTcgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iaHR0cDov L2l5ZXNjYXJkLmNvbS9pbWcvYnVfMDEuZ2lmIiB3aWR0aD00IA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib3JkZXI9MD4gseK+xiZuYnNwO8Datb/C9yCxuMDUvcMgxvfA zsauIMfSwM4gPEJSPjxJTUcgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl aWdodD03IHNyYz0iaHR0cDovL2l5ZXNjYXJkLmNvbS9pbWcvYnVfMDEuZ2lmIiB3aWR0aD00 IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI9MD4gsbmzu8PWw8og wdbAryC6uMfouau34SCwocDUPEJSPjxJTUcgaGVpZ2h0PTcgDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNyYz0iaHR0cDovL2l5ZXNjYXJkLmNvbS9pbWcvYnVfMDEuZ2lm IiB3aWR0aD00IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI9MD4g waS68SDA2rW/wvcgv+vHsCDH0sDOPC9TUEFOPjwvUD4NCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgPERJViBhbGlnbj1sZWZ0Pg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA8VEFCTEUgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0wIGJvcmRlcj0wPg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VEJPRFk+DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDxUUj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPFREIHdpZHRoPTE0MT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFAg YWxpZ249bGVmdD48U1BBTiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5 bGU9IkZPTlQtU0laRTogOXB0Ij48Rk9OVCBjb2xvcj0jY2Q0NDMzPjxCPiZuYnNwO7HivsYg DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgILPruu23ub26PC9CPjwvRk9OVD48 L1NQQU4+PC9QPjwvVEQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxURCB3 aWR0aD0xNDE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQIGFsaWduPWxl ZnQ+ICZuYnNwOzwvUD48L1REPjwvVFI+PC9UQk9EWT48L1RBQkxFPjwvRElWPjwvVEQ+PC9U Uj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRSPg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjMyNCI+DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDxQIGFsaWduPWxlZnQ+PEJSPjxJTUcgaGVpZ2h0PSI3MiIgDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iaHR0cDovL2l5ZXNjYXJkLmNv bS9pbWcvcGFydG5lcjE1X2NhcmRfaW1nLmpwZyIgDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdpZHRoPSIxMTMiIGFsaWduPWxlZnQgYm9yZGVyPTA+PElNRyBoZWlnaHQ9 NyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPSJodHRwOi8vaXllc2Nh cmQuY29tL2ltZy9idV8wMS5naWYiIHdpZHRoPTQgDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvcmRlcj0wPiA8U1BBTiBzdHlsZT0iRk9OVC1TSVpFOiA5cHQiPsbyu/0m bmJzcDu/rMi4uvEguOnBpjxCUj48SU1HIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBoZWlnaHQ9NyBzcmM9Imh0dHA6Ly9peWVzY2FyZC5jb20vaW1nL2J1XzAxLmdpZiIg d2lkdGg9NCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyPTA+IMb3 wM7GrrOzus4ssPiw+rHdIMSrteWw4cGmILytuvG9uiZuYnNwOzxCUj48SU1HIA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9NyBzcmM9Imh0dHA6Ly9peWVzY2Fy ZC5jb20vaW1nL2J1XzAxLmdpZiIgd2lkdGg9NCANCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9yZGVyPTA+IMf2tOvBpMCvIKekILTnIDQwv/ggPEJSPjxJTUcgaGVpZ2h0 PTcgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iaHR0cDovL2l5ZXNj YXJkLmNvbS9pbWcvYnVfMDEuZ2lmIiB3aWR0aD00IA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBib3JkZXI9MD4gv7XIrSC/ubjFIMDltOcgMiwwMDC/+CDH0sDOIDwvU1BB Tj48L1A+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxESVYgYWxpZ249bGVm dD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRBQkxFIGNlbGxTcGFjaW5n PTAgY2VsbFBhZGRpbmc9MCBib3JkZXI9MD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPFRCT0RZPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VFI+DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0xNTIgaGVpZ2h0PTE3 Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UD4mbmJzcDsmbmJzcDs8U1BB TiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IkZPTlQtU0laRTog OXB0Ij48Rk9OVCBjb2xvcj0jY2Q0NDMzPjxCPktUIA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICC69MfDtvPA2jwvQj48L0ZPTlQ+PC9TUEFOPjwvUD48L1REPg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9MTUyIGhlaWdodD0xNz4NCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFAgYWxpZ249bGVmdD4gJm5ic3A7PC9Q PjwvVEQ+PC9UUj48L1RCT0RZPjwvVEFCTEU+PC9ESVY+PC9URD4NCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIyOTEiPg0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA8UCBhbGlnbj1sZWZ0Pjxicj48SU1HIGhlaWdodD0iNjgiIA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9Imh0dHA6Ly9peWVzY2FyZC5jb20v aW1nL2NhcmRfaW1nXzExLmdpZiIgd2lkdGg9IjEwNiIgDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFsaWduPWxlZnQgYm9yZGVyPTA+PElNRyBoZWlnaHQ9NyANCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPSJodHRwOi8vaXllc2NhcmQuY29tL2lt Zy9idV8wMS5naWYiIHdpZHRoPTQgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvcmRlcj0wPiA8U1BBTiBzdHlsZT0iRk9OVC1TSVpFOiA5cHQiPrvnv+vH0SAwLjUluKYg DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgILrSv+zAzL/0tb2x4jxCUj48SU1H IGhlaWdodD03IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9Imh0dHA6 Ly9peWVzY2FyZC5jb20vaW1nL2J1XzAxLmdpZiIgd2lkdGg9NCANCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9yZGVyPTA+IMbyu/0mbmJzcDu/rMi4uvEguOnBpiA8QlI+ PElNRyBoZWlnaHQ9NyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPSJo dHRwOi8vaXllc2NhcmQuY29tL2ltZy9idV8wMS5naWYiIHdpZHRoPTQgDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcj0wPiCx3cC2vK268b26PEJSPjxJTUcgaGVp Z2h0PTcgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iaHR0cDovL2l5 ZXNjYXJkLmNvbS9pbWcvYnVfMDEuZ2lmIiB3aWR0aD00IA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBib3JkZXI9MD4gNb7vILmrt+EgurjH6CA8YnI+PGJyPjxicj48L1NQ QU4+PC9QPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RElWIGFsaWduPWxl ZnQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUQUJMRSBjZWxsU3BhY2lu Zz0wIGNlbGxQYWRkaW5nPTAgYm9yZGVyPTA+DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDxUQk9EWT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRSPg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9MTQzPg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA8UCBhbGlnbj1sZWZ0PjxTUEFOIA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0iRk9OVC1TSVpFOiA5cHQiPjxGT05U IGNvbG9yPSNjZDQ0MzM+PEI+Jm5ic3A7u+e2+8DHIA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICC81bDhxuyx4jwvQj48L0ZPTlQ+PC9TUEFOPjwvUD48L1REPg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9MTQzPg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA8UCBhbGlnbj1sZWZ0PiAmbmJzcDs8L1A+PC9URD48L1RS PjwvVEJPRFk+PC9UQUJMRT48L0RJVj48L1REPjwvVFI+PC9UQk9EWT48L1RBQkxFPiAgICAg ICAgPC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICAgICAgPHRkIHdpZHRoPSI5NzQi PjxwIGFsaWduPSJsZWZ0Ij48Zm9udCBzaXplPSIyIiBmYWNlPSKxvLiyIiBjb2xvcj0iIzY2 NjY2NiI+Jm5ic3A7sc3Hz8DHIA0KICAgICAgICAgICAguN7Az8HWvNK0wiDApbytx87AuyDF 68fYILz2wf3H0SCwzcDMuOcsILHXv9y/oSC+7rawx9EgwaS6uLW1ILCusO0gDQogICAgICAg ICAgICDA1sH2IL7KwL3AuyC54Mj8tM+02S48YnI+ICZuYnNwO8DMIEUtbWFpbMC6ILnfvcXA /L/rwMy45ywgv/jEoSC+ysC4vccgDQogICAgICAgICAgICCw5r/sIL7Gt6Egw6K/oSC43sDP wda80rimIMDUt8LHz7+pIMHWvcO46SC1ziC5+CC02b3DILjewM/AzCANCiAgICAgICAgICAg ILChwfYgJm5ic3A7vsq1tbfPIMfPsNq9wLTPtNkuPGJyPiAmbmJzcDsmbmJzcDs8YnI+ICZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwv Zm9udD48Rk9OVCBmYWNlPSKxvLiyIiBjb2xvcj0iIzY2NjY2NiIgc2l6ZT0yPrq7ILjewM/A uiDBpLq4xeu9xbrOILHHsO0gu+fH17+hIMDHsMUgwaa48b+hIA0KPC9GT05UPjxGT05UIGZh Y2U9IrG8uLIiIGNvbG9yPSJyZWQiIHNpemU9IjIiPluxpLDtXTwvRk9OVD48Rk9OVCBmYWNl PSKxvLiyIiBjb2xvcj0iIzY2NjY2NiIgc2l6ZT0yPrbzsO0gx6W9w7XIILGksO0guN7Az8DU tM+02S48L0ZPTlQ+PGZvbnQgY29sb3I9IiM2NjY2NjYiPjxCUj4gJm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9m b250PjxhIGhyZWY9Imh0dHA6Ly9peWVzY2FyZC5jb20vcmVzZnVsLmh0bWwiPjxmb250IGNv bG9yPSIjNjY2NjY2Ij48aW1nIHNyYz0iaHR0cDovL2l5ZXNjYXJkLmNvbS9pbWcvYnV0dG9u XzMuZ2lmIiB3aWR0aD0iNzEiIGhlaWdodD0iMjUiIGJvcmRlcj0iMCI+PC9mb250PjwvYT48 Zm9udCBjb2xvcj0iIzY2NjY2NiI+IA0KICAgICAgICAgICAgPC9mb250PjxGT05UIGNvbG9y PSIjNjY2NjY2IiANCnNpemU9Mj659sawwLsgxay4r8fPvcO46SC89r3FsMW6zsOzuK6woSDA zLfnvu4gwf20z7TZLjwvRk9OVD48Zm9udCBjb2xvcj0iIzY2NjY2NiI+IDwvZm9udD48L3A+ DQogICAgICAgIDwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgICAgIDx0ZCB3aWR0 aD0iOTc0Ij4NCiAgICAgICAgICAgIDxwIGFsaWduPSJjZW50ZXIiPjxmb250IGNvbG9yPSIj NjY2NjY2Ij4mbmJzcDs8L2ZvbnQ+PEZPTlQgZmFjZT0isby4siIgY29sb3I9IiM2NjY2NjYi IHNpemU9Mj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJZiB5b3Ugd29uJ3QgcmVjZWl2ZSBh bnkgbW9yZSBtYWlsIGFib3V0IHRoaXMgDQpzaXRlLCA8L0ZPTlQ+PGZvbnQgY29sb3I9IiM2 NjY2NjYiPjxCUj4gJm5ic3A7Jm5ic3A7PC9mb250PjxhIGhyZWY9Imh0dHA6Ly9peWVzY2Fy ZC5jb20vcmVzZnVsLmh0bWwiPjxmb250IGNvbG9yPSIjNjY2NjY2Ij48aW1nIHNyYz0iaHR0 cDovL2l5ZXNjYXJkLmNvbS9pbWcvYnV0dG9uXzQuZ2lmIiB3aWR0aD0iNzEiIGhlaWdodD0i MjUiIGJvcmRlcj0iMCI+PC9mb250PjwvYT48Rk9OVCBjb2xvcj0iIzY2NjY2NiIgDQpzaXpl PTI+cHJlc3MgYnV0dG9uIGFuZCBmaWxsIHlvdXIgZS1tYWlsIGFkZHJlc3MuIEFuZCB0aGVu IHdlIHdpbGwgbm90IHNlbmQgYW55IA0KbWFpbCB0byB5b3U8L0ZPTlQ+PC9wPg0KICAgICAg ICA8L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgICAgICA8dGQgd2lkdGg9Ijk3NCIg Ymdjb2xvcj0iIzhCQjVFMiI+DQo8dGFibGUgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIxIiBj ZWxsc3BhY2luZz0iMCIgd2lkdGg9IjYzMiIgYm9yZGVyY29sb3JkYXJrPSJ3aGl0ZSIgYm9y ZGVyY29sb3JsaWdodD0iYmxhY2siIGJnY29sb3I9IndoaXRlIj4NCiAgICA8dHI+DQogICAg ICAgIDx0ZCB3aWR0aD0iNjI2IiBiZ2NvbG9yPSJ3aGl0ZSI+DQogICAgICAgICAgICA8dGFi bGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNjMyIj4NCiAgICAg ICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTI2IiBo ZWlnaHQ9IjUyIiByb3dzcGFuPSIzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxp bWcgc3JjPSJodHRwOi8vd2VtZXMuY29tL2ltYWdlL8f2tOu3zrDtLmdpZiIgd2lkdGg9IjE5 NyIgaGVpZ2h0PSI0NyIgYm9yZGVyPSIwIj48L3A+DQogICAgICAgICAgICAgICAgICAgIDwv dGQ+DQogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNDkwIiBoZWlnaHQ9IjEzIj4N CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOzxpbWcgc3JjPSJodHRwOi8vd2VtZXMuY29tL2ltYWdlL21haWwxLmdpZiIg d2lkdGg9IjM0MCIgaGVpZ2h0PSIxMiIgYm9yZGVyPSIwIj48L3A+DQogICAgICAgICAgICAg ICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICA8 dHI+DQogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNDkwIiBoZWlnaHQ9IjE1Ij4N CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbWcgc3Jj PSJodHRwOi8vd2VtZXMuY29tL2ltYWdlL7+stvTDszEuZ2lmIiB3aWR0aD0iMTMzIiBoZWln aHQ9IjEyIiBib3JkZXI9IjAiPjxhIGhyZWY9Im1haWx0bzplbmV4dG9wQGx5Y29zLmNvLmty Ij48Zm9udCBjb2xvcj0iIzg4ODY4NiIgc2l6ZT0iMiIgZmFjZT0isby4siI+ZW5leHRvcEBs eWNvcy5jby5rcjwvZm9udD48L2E+PC9wPg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0K ICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAg ICAgICAgICAgICA8dGQgd2lkdGg9IjQ5MCIgaGVpZ2h0PSIxNiI+DQogICAgICAgICAgICAg ICAgICAgICAgICA8cD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz cDsmbmJzcDsmbmJzcDs8aW1nIHNyYz0iaHR0cDovL3dlbWVzLmNvbS9pbWFnZS9jb3B5cmln aHQuZ2lmIiB3aWR0aD0iMzQwIiBoZWlnaHQ9IjEyIiBib3JkZXI9IjAiPjwvcD4NCiAgICAg ICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAg ICAgPC90YWJsZT4NCiAgICAgICAgPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT4NCiAgICAg ICAgPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT4NCjxwPiZuYnNwOzwvcD4NCjwvYm9keT4N Cg0KPC9odG1sPg0K ------=_NextPart_000_0207_01C0F49A.93A50C00-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message